目前 .NET Core 中似乎没有包含 IAsyncEnumerable 的 Linq 支持。那么,如何正确地进行简单的操作,例如 ToList 和 Count?
目前 .NET Core 中似乎没有包含 IAsyncEnumerable 的 Linq 支持。那么,如何正确地进行简单的操作,例如 ToList 和 Count?
这是一个很好的问题,因为在默认的.NET Core应用程序中,使用隐式框架引用时,IAsyncEnumerable<T>
在 IntelliSense 中几乎没有有用的项。
预期您会像这样添加 System.Linq.Async
包(也称为 Ix Async,请参见此处):
<PackageReference Include="System.Linq.Async" Version="4.0.0" />
然后你可以使用 CountAsync
或者 ToListAsync
:
async IAsyncEnumerable<int> Numbers()
{
yield return 1;
await Task.Delay(100);
yield return 2;
}
var count = await Numbers().CountAsync();
var myList = await Numbers().ToListAsync();
正如评论中指出的那样,这些方法单独使用并不是很有用,应该在使用更强大的特性时将数据保持为异步流,并配合像 SelectAwait
和 WhereAwait
等东西一起使用。