“ ToListAsync()”和“ AsAsyncEnumerable()。ToList()”之间的区别

时间:2019-05-16 20:30:17

标签: c# async-await entity-framework-core tolist iasyncenumerable

函数需要返回Task<List<Record>> 以下两个选项均返回Task<List<Record>>,哪个更有效?这里有什么标准的方法吗?

选项1:

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

选项2:

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

2 个答案:

答案 0 :(得分:6)

虽然pfx的现有答案对于.NET Core 2.x和更早版本仍然适用,但AsAsyncEnumerable已正式添加到.NET Core3.x。有关更多信息,请参见Ian Kemp的评论。

答案 1 :(得分:1)

选择选项1 ToListAsync,因为AsAsyncEnumerable的{​​{3}}明确提到了

  

这是支持Entity Framework Core的内部API   基础架构,并且不受与相同的兼容性标准的约束   公共API。在任何情况下,如有更改或删除,恕不另行通知   发布。您只应在极端情况下直接在代码中使用它   注意并知道这样做可能会导致应用程序失败   更新到新的Entity Framework Core版本时。

source code提到

  

此API支持Entity Framework Core基础结构,但不支持   旨在直接从您的代码中使用。该API可能会更改或   在将来的版本中删除。