Выбор ответа Middle Потоки и синхронизация обновлено
Parallel.ForEach для HTTP-запросов
Вопрос
Нужно скачать 1000 страниц с ограничением 10 одновременных запросов. Что выбрать в .NET 8?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Parallel.ForEachAsync с MaxDegreeOfParallelism = 10. Parallel.ForEachAsync (.NET 6+) поддерживает асинхронное тело и ограничение степени параллелизма.
Варианты ответа
Parallel.ForEachс.Resultвнутри тела циклаParallel.ForEachAsyncсMaxDegreeOfParallelism = 10правильный ответTask.WhenAllпо всем 1000 задачам сразу без ограничений- 1000 вызовов
new Thread(...)с ожиданием черезJoin
Разбор
Parallel.ForEachAsync (.NET 6+) поддерживает асинхронное тело и ограничение степени параллелизма. Parallel.ForEach рассчитан на синхронную CPU-работу, а .Result внутри заблокирует потоки пула. WhenAll без ограничения запустит 1000 запросов сразу и может упереться в лимиты сервера. Потоки ОС на каждый запрос дороги и бесполезны для I/O. Альтернатива: SemaphoreSlim с WhenAll.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.