Параллельный Linq поверх ʻIAsyncEnumerable`?

Любая официальная или стабильная сторонняя библиотека, поддерживающая использование AsParallel над IAsyncEnumerable<T> (.NET Standard 2.1)?

Я не хочу оборачивать IAsyncEnumerable<T> чтобы IEnumerable<Task<T>> с помощью асинхронных методов, TaskCompletionSource или что-то еще из-за доплаты.

1 ответ

Сочетание параллельного и асинхронного режимов не имеет особого смысла. Целью параллелизма является одновременное использование более одного процессора / ядра, в то время как цель асинхронности заключается в том, чтобы вообще не использовать ресурсы ЦП.

В AsParallel(PLINQ) используется сIEnumerables в случаях при перечислении IEnumerableзагружает процессор. Другими словами, когда нужно выполнить много-много инструкций ЦП между одним MoveNext призыв и следующий. СIAsyncEnumerables задержка (обычно) не вызвана вызовом MoveNextAsync сам метод, но ожидая возвращенного ValueTask. Ожидание ожидающего объекта потребляет нулевые ресурсы ЦП. И вы не можете контролировать, когда он будет завершен. Возьмем, например,Task.Delay(1000). Он завершится не раньше, чем через секунду, и вы не сможете заставить его завершить за полсекунды, если не найдете способ как-то изменить пространство-время.

Другие вопросы по тегам