Почему при работе с 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());
}
}
}
Потому что задачи используют пул потоков. Если при создании задачи в пуле не осталось потоков - то CLR выбирает создавать новый или ставит задачу в очередь.
Если заведомо известно что задача будет выполняться долго и другие не должны ее ждать - можно использовать метод Task.Factory.StartNew с опцией TaskCreationOptions.LongRunning.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости