Задать вопрос
@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
  • Вопрос задан
  • 3021 просмотр
Подписаться 3 Оценить 3 комментария
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
dabrahabra
@dabrahabra
.NET Developer
На самом деле Task.WhenAll тоже не стартует все таски параллельно, таски исполняются в ThreadPool и именно он отвечает за запуск тасков. Если вам нужно ограничить параллельность сверху то можно использовать подобное решение: MSDN
Каким образом вы выясняли, что 500 задач оптимальный вариант?
Между тем Windows оперирует потоками и чем больше потоков запущено, тем больше времени уходит на переключение между ними.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы