Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Task vs Thread, сильная задержка Task

#c_sharp #многопоточность


Почему при работе с Task происходят такие задержки?

using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
  static void SomethingLong()
  {
    Thread.Sleep(30000);
  }
  static void Main(string[] args)
  {
    for (int i = 0; i < 20; ++i)
      Task.Run(() => { Console.Write("="); SomethingLong(); });
    for (int i = 0; i < 20; ++i)
      (new Thread(() => { Console.Write("-"); SomethingLong(); })).Start();
    for (int i = 1; i <= 20; ++i)
    {
      Thread.Sleep(1000);
      Console.Write(i.ToString());
    }
  }
}



    


Ответы

Ответ 1



Потому что задачи используют пул потоков. Если при создании задачи в пуле не осталось потоков - то CLR выбирает создавать новый или ставит задачу в очередь. Если заведомо известно что задача будет выполняться долго и другие не должны ее ждать - можно использовать метод Task.Factory.StartNew с опцией TaskCreationOptions.LongRunning.

Комментариев нет:

Отправить комментарий