Rozważmy następujący fragment kodu:Dlaczego Task.Factory.StartNew zwraca natychmiast, gdy Task.Run nie?
Task[] tasks = new Task[4];
for (var i = 0; i < tasks.Length; ++i) {
tasks[i] = Task.Run(async() =>
{
await Task.Delay(4000);
});
}
for (var i = 0; i < tasks.Length; ++i)
await tasks[i];
Console.WriteLine("Done!");
To działa zgodnie z oczekiwaniami, biorąc 4.000 ms do wykonania. Jeśli jednak wymieniam Task.Run
z Task.Factory.StartNew
, zajmie to tylko 0,006 ms!
Czy ktoś może wyjaśnić, dlaczego?