在使用 IEnumerable<T>
时,可以使用来自 System.Linq
命名空间的内置扩展方法,如 Skip
、Where
和 Select
。
当 Microsoft 在 C#8 中添加了 IAsyncEnumerable
时,是否也添加了新的 Linq 方法来支持它?
我当然可以自己实现这些方法,或者找到一些包来完成,但如果存在语言标准方法,我更愿意使用它。
在使用 IEnumerable<T>
时,可以使用来自 System.Linq
命名空间的内置扩展方法,如 Skip
、Where
和 Select
。
当 Microsoft 在 C#8 中添加了 IAsyncEnumerable
时,是否也添加了新的 Linq 方法来支持它?
我当然可以自己实现这些方法,或者找到一些包来完成,但如果存在语言标准方法,我更愿意使用它。
针对 IAsyncEnumerable
的LINQ功能,可以使用System.Linq.Async
来实现,该组件是.NET反应式扩展的一部分。整个反应式扩展被分成了两个较大的NuGet包:System.Reactive
和System.Interactive
。
虽然所有的包都保持不变,但是这些扩展现在都位于System.Linq
命名空间中,而不再是System.Linq.Async
(感谢Dzmitry Lahoda)。
System.Linq.Async
现在似乎是一个单独的包了:https://www.nuget.org/packages/System.Linq.Async。 - Benno StraubFirstOrDefaultAsync()
,它需要传入一个预期的 CancellationToken
。 - Steve FriedlFirstOrDefaultAsync()
的返回类型是 ValueTask<T>
,而不是 Task<T>
。 - Steve FriedlSystem.Linq.Async
(而不是 System.Interactive
)。该包在命名空间 System.Linq
中公开其异步 Linq 扩展。 - 3dGrabber自从 .NET 7 开始,你可以使用 .ToBlockingEnumerable()
将 IAsyncEnumerable<T>
转换为 IEnumerable<T>
,然后就可以在其上调用 LINQ 方法了。
IAsyncEnumerable
的支持。您的回答将异步集合降级为阻塞同步游标,这不是异步编程的最佳方法。 - Lord of the Goo