任何支持在IAsyncEnumerable<T>
(.NET Standard 2.1(上使用AsParallel
的官方或稳定的第三方库?
由于额外的成本,我不想用异步方法、TaskCompletionSource
或其他方法将IAsyncEnumerable<T>
包装成IEnumerable<Task<T>>
。
将并行和异步结合起来没有多大意义。并行的目的是同时使用多个处理器/内核,而异步的目的是根本不使用任何CPU资源。
在枚举IEnumerable
占用CPU的情况下,AsParallel
(PLINQ(与IEnumerable
s一起使用。换句话说,当一个MoveNext
调用和下一个调用之间必须执行许多CPU指令时。对于IAsyncEnumerable
s,延迟(通常(不是由MoveNextAsync
方法本身的调用引起的,而是由等待返回的ValueTask
引起的。等待一个不可用的对象会消耗零CPU资源。你无法控制它何时完成。以Task.Delay(1000)
为例。它最快将在一秒钟后完成,除非你找到一种使时空弯曲的方法,否则你不能强迫它在半秒钟内完成。😃