将 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();

正如评论中所指出的,这些方法本身并没有多大用处,应该在您使用了更强大的功能之后使用它们,同时将数据保持为异步流,例如 SelectAwaitWhereAwait 等...