Ich habe Methode:Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
private static void Method()
{
Console.WriteLine("Method() started");
for (var i = 0; i < 20; i++)
{
Console.WriteLine("Method() Counter = " + i);
Thread.Sleep(500);
}
Console.WriteLine("Method() finished");
}
Und ich mag diese Methode in einer neuen Aufgabe beginnen. Ich kann neue Aufgabe beginnen wie diese
var task = Task.Factory.StartNew(new Action(Method));
oder diese
var task = Task.Run(new Action(Method));
Aber gibt es einen Unterschied zwischen Task.Run()
und Task.Factory.StartNew()
. Beide verwenden ThreadPool und starten Method() sofort nach dem Erstellen der Instanz der Aufgabe. Wann sollten wir die erste Variante verwenden und wann die zweite?
Eigentlich muss StartNew den ThreadPool nicht verwenden, siehe den Blog, mit dem ich in meiner Antwort verlinkt bin. Das Problem ist 'StartNew', das standardmäßig' TaskScheduler.Current' verwendet, was möglicherweise der Thread-Pool ist, aber auch der UI-Thread. –
Mögliches Duplikat von [Betreffend die Verwendung von Task.Start(), Task.Run() und Task.Factory.StartNew()] (https://stackoverflow.com/questions/29693362/regarding-usage-of-task-start -task-run-and-task-factory-startneu) –