Как обрабатывать IAsyncEnumerable полностью одновременно? Является ли Parallel.ForEachAsync ответом? ⇐ C#

Место общения программистов C#
Anonymous
Как обрабатывать IAsyncEnumerable полностью одновременно? Является ли Parallel.ForEachAsync ответом?

Сообщение Anonymous »

Представьте, что у меня есть IAsyncEnumerable, где каждый Request представляет собой какое-то входящее сообщение, которое я хочу обработать, но я не хочу ждать завершения каждого обработчика сообщений перед перемещением. переход к следующей итерации/сообщению; Я хочу, чтобы как можно больше сообщений обрабатывалось «одновременно».
Могу ли я использовать простую перегрузку метода Parallel.ForEachAsync (без указания максимального количества потоков, чтобы делегировать обработку всего этого самому фреймворку)?
По сути, я этого не хочу:

Код: Выделить всё

await foreach (var request in requests) // `requests` is an `IAsyncEnumerable`
{
    await Handle(request); // I don't want to await here
}
Могло бы вместо этого сделать это? Или это проблематично (например, потенциально может исчерпать пул потоков или перегрузить системные ресурсы)? Или есть какой-то лучший подход?

Код: Выделить всё

await Parallel.ForEachAsync(requests, async (request, ct) =>
{
    await Handle(request);
});
Обновление: Parallel.ForEachAsync кажется плохим вариантом, поскольку он ограничивает количество параллельных вызовов обработчика количеством ядер ЦП хост-машины.
>

Подробнее здесь: https://stackoverflow.com/questions/791 ... oreachasyn

Вернуться в «C#»