linq “ToListAsync()”和“AsyncEnumerable().ToList()”之间的差异

dba5bblo  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(207)

函数需要返回Task<List<Record>>下面两个选项都返回Task<List<Record>>,哪一个更有效?这里有没有标准的方法?
方案一:

Task<List<Record>> GetRecords()
{
    return 
    DbContext.Set<Record>.Where(predicate).ToListAsync();
}

备选方案二:

Task<List<Record>> GetRecords()
{
    return
    DbContext.Set<Record>.Where(predicate).AsAsyncEnumerable().ToList();
}
v64noz0r

v64noz0r1#

虽然pfx的现有答案对于.NET Core 2.x和更早版本仍然是正确的,但是AsAsyncEnumerable已经被正式添加到.NET Core 3.x中。

aiazj4mn

aiazj4mn2#

请注意,这是.NET Core 3.x之前的答案。
在下面的@IanKemp评论中找到更新。
选择选项1 ToListAsync,因为AsAsyncEnumerablesource code明确提到
这是一个支持实体框架核心基础结构的内部API,不受与公共API相同的兼容性标准的约束。在任何版本中,它都可能被更改或删除,恕不另行通知。您应该非常谨慎地在代码中直接使用它,并知道这样做可能会导致在更新到新的实体框架核心版本时应用程序失败。
official documentation提到
此API支持实体框架核心基础结构,不应直接从代码中使用。此API在将来的版本中可能会更改或删除。

相关问题