使实体框架Linq查询异步

本文关键字:查询 异步 Linq 框架 实体 | 更新日期: 2023-09-27 18:10:53

我有一个函数,在我的winform应用程序中填充一个组合框。操作需要几秒钟,所以我想让它异步。

函数如下:

public static List<string> GetAllPostCodeRegions(string country)
{
    using (var db = new PlaceDBContext())
    {
        var regions = db.PostCodes.Where(pc => pc.Country == country).OrderBy(pc => pc.Region).Select(pc => pc.Region).Distinct().ToList();
        return regions;
    }
}

我试着像下面这样添加异步关键字:

public async static Task<List<string>> GetAllPostCodeRegions(string country)
{
    using (var db = new PlaceDBContext())
    {
        var regions = db.PostCodes.Where(pc => pc.Country == country).OrderBy(pc => pc.Region).Select(pc => pc.Region).Distinct().ToList();
        return regions;
    }
}

但是这并没有等待任何东西当我调用

时UI仍然会锁定
var regions = await DataFunctions.GetAllPostCodeRegions("UK");

如何使此操作异步并停止UI锁定?

使实体框架Linq查询异步

您可以尝试.ToListAsync或:

public static Task<List<string>> GetAllPostCodeRegions(string country)
{
    return Task.Run(() => 
       {
          using (var db = new PlaceDBContext())
          {
               return db.PostCodes
                        .Where(pc => pc.Country == country)
                        .OrderBy(pc => pc.Region)
                        .Select(pc => pc.Region).Distinct().ToList();
          }
      });        
}