Для ограниченной конкурентности используйте SemaphoreSlim, пул потребителей или Parallel.ForEachAsync с MaxDegreeOfParallelism. Один Task.WhenAll ограничение не вводит.
Как ограничить степень параллелизма при обработке набора асинхронных задач?
Для ограниченной конкурентности используйте SemaphoreSlim, пул потребителей или Parallel.ForEachAsync с MaxDegreeOfParallelism. Один Task.WhenAll ограничение не вводит.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для ограниченной конкурентности используйте SemaphoreSlim, пул потребителей или Parallel.ForEachAsync с MaxDegreeOfParallelism. Один Task.WhenAll ограничение не вводит.
Пример для .NET 6+:
await Parallel.ForEachAsync(items,
new ParallelOptions {
MaxDegreeOfParallelism = 4,
CancellationToken = cancellationToken
},
async (item, ct) => await ProcessAsync(item, ct));
Одновременно выполняется не более четырёх тел итерации. Для очень большого потока заданий bounded Channel позволяет также ограничить очередь и память. Лимит подбирают по ограничениям зависимости и измерениям, а не обязательно по числу ядер для I/O. Это ограничение конкурентности, не rate limit запросов в секунду.
Источник: learn.microsoft.com.