将 linq 类型方法与 IAsyncEnumerable 一起使用的正确方法是什么?
What is the correct way to use linq type methods with IAsyncEnumerable?
对于 .NET Core 打包的 IAsyncEnumerable,似乎没有任何包含的 linq 支持。能够执行 ToList 和 Count 等简单操作的正确方法是什么?
这是一个很好的问题,因为 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
等...
对于 .NET Core 打包的 IAsyncEnumerable,似乎没有任何包含的 linq 支持。能够执行 ToList 和 Count 等简单操作的正确方法是什么?
这是一个很好的问题,因为 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
等...