在IAsyncEnumerable中使用linq类型方法的正确方法是什么?

时间:2019-11-26 23:02:06

标签: c# iasyncenumerable

.NET Core打包的IAsyncEnumerable似乎没有任何linq支持。能够执行诸如ToList和Count之类的简单事情的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

这是一个很好的问题,因为IAsyncEnumerable<T>上的IntelliSense中几乎没有可用的项目,带有默认.NET Core应用程序具有的隐式框架引用。

期望您将像这样添加System.Linq.Async(称为Ix Async,see here)软件包:

<PackageReference Include="System.Linq.Async" Version="4.0.0" />

然后您可以使用CountAsyncToListAsync

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等...