#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.
Комментариев нет:
Отправить комментарий