@dj_raphael

Проблема с Task.WhenAny, не запускает все таски сразу, Как решить?

Пишу приложение на C# с async await, которое загружает данные по url и парсит.
Экспериментально выяснил что 500 одновременных задач нагружают мой комп наиболее эффективно.
Создаю малый список из 500 тасок и когда пишу Task.WhenAll(tasks) все таски стартуют одновременно и заканчиваются когда придётся. Переписал на Task.WhenAny(tasks) - удаляю завершавшиеся и добавляю новые до 500, чтобы держать постоянно запущенными 500 тасок. Но не запускается больше 60 тасок одновременно. Оказалось что Task.WhenAny стартует таски по очереди с интервалом примерно в 1 секунду.

Подскажите как написать чтобы работало эффективно, возвращаться к тредам очень неохота.
VS2013 Update2 WPF C# .NET 4.5
  • Вопрос задан
  • 2985 просмотров
Пригласить эксперта
Ответы на вопрос 1
dabrahabra
@dabrahabra
.NET Developer
На самом деле Task.WhenAll тоже не стартует все таски параллельно, таски исполняются в ThreadPool и именно он отвечает за запуск тасков. Если вам нужно ограничить параллельность сверху то можно использовать подобное решение: MSDN
Каким образом вы выясняли, что 500 задач оптимальный вариант?
Между тем Windows оперирует потоками и чем больше потоков запущено, тем больше времени уходит на переключение между ними.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы