Темы не запускаются одновременно - PullRequest
0 голосов
/ 27 февраля 2019

Я знаю, что есть много вопросов по этой теме, я просмотрел все из них и не смог найти подходящее решение.

Я запускаю 10 потоков одновременно в приложении WPF.

Первые четыре потока запускаются одновременно, но другие задания начинают отставать примерно на 5-10 секунд.Ниже приведены данные испытаний.

Как решить эту проблему?

private void DoParallel()
{
    for (int i = 0; i < 10; i++)
    {
         Task.Factory.StartNew(() =>
          {
            Console.WriteLine(DateTime.Now.ToString());
            DoSomeWork();
          });
        }
    }
}
  • 27.02.2019 17: 31: 33
  • 27.02.2019 17: 31: 33
  • 27.02.2019 17: 31: 33
  • 27.02.2019 17: 31: 33
  • 27.02.2019 17: 31: 35
  • 27.02.2019 17: 31: 40
  • 27.02.2019 17: 31: 46
  • 27.02.2019 17: 31: 52
  • 27.02.2019 17:32: 00
  • 27.02.2019 17: 32: 02

1 Ответ

0 голосов
/ 27 февраля 2019

Это по замыслу.По умолчанию TaskScheduler используется .NET ThreadPool, который может быть насыщенным, и вы имеете ограниченный контроль над ним.

Если вы хотите, выможет создать свой собственный TaskScheduler, чтобы изменить это поведение.Например, при желании вы можете создать тот, который запускает отдельный поток.

Это поведение станет еще более выраженным, если ваш код выполнит еще больше задач, чем уже:

private void DoParallel()
{
    //This will over-saturate the ThreadPool unless you use your own TaskScheduler
    for (int i = 0; i < 100; i++)
    {
         Task.Factory.StartNew(() =>
          {
            Console.WriteLine(DateTime.Now.ToString());
            DoSomeWork();
          });
        }
    }
}
...