.NET Core打包的IAsyncEnumerable似乎没有任何linq支持。能够执行诸如ToList和Count之类的简单事情的正确方法是什么?
答案 0 :(得分:7)
这是一个很好的问题,因为IAsyncEnumerable<T>
上的IntelliSense中几乎没有可用的项目,带有默认.NET Core应用程序具有的隐式框架引用。
期望您将像这样添加System.Linq.Async
(称为Ix Async,see here)软件包:
<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
等...