Параллельный Linq поверх ʻIAsyncEnumerable`?
Любая официальная или стабильная сторонняя библиотека, поддерживающая использование AsParallel
над IAsyncEnumerable<T>
(.NET Standard 2.1)?
Я не хочу оборачивать IAsyncEnumerable<T>
чтобы IEnumerable<Task<T>>
с помощью асинхронных методов, TaskCompletionSource
или что-то еще из-за доплаты.
1 ответ
Сочетание параллельного и асинхронного режимов не имеет особого смысла. Целью параллелизма является одновременное использование более одного процессора / ядра, в то время как цель асинхронности заключается в том, чтобы вообще не использовать ресурсы ЦП.
В AsParallel
(PLINQ) используется сIEnumerable
s в случаях при перечислении IEnumerable
загружает процессор. Другими словами, когда нужно выполнить много-много инструкций ЦП между одним MoveNext
призыв и следующий. СIAsyncEnumerable
s задержка (обычно) не вызвана вызовом MoveNextAsync
сам метод, но ожидая возвращенного ValueTask
. Ожидание ожидающего объекта потребляет нулевые ресурсы ЦП. И вы не можете контролировать, когда он будет завершен. Возьмем, например,Task.Delay(1000)
. Он завершится не раньше, чем через секунду, и вы не сможете заставить его завершить за полсекунды, если не найдете способ как-то изменить пространство-время.