Die zweite Methode wurde Task.Run
in einer späteren Version des .NET Frameworks (in .NET 4.5) eingeführt.
Die erste Methode Task.Factory.StartNew
bietet Ihnen jedoch die Möglichkeit, viele nützliche Dinge über den Thread zu definieren, den Sie erstellen möchten, Task.Run
ohne dies zu tun.
Angenommen, Sie möchten einen lang laufenden Task-Thread erstellen. Wenn ein Thread des Thread-Pools für diese Aufgabe verwendet wird, kann dies als Missbrauch des Thread-Pools angesehen werden.
Eine Möglichkeit, dies zu vermeiden, besteht darin, die Aufgabe in einem separaten Thread auszuführen. Ein neu erstellter Thread , der dieser Aufgabe gewidmet ist und nach Abschluss Ihrer Aufgabe zerstört wird. Sie können dies nicht mit dem erreichen Task.Run
, während Sie dies mit dem folgenden tun können Task.Factory.StartNew
:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
Wie hier angegeben :
Daher haben wir in der .NET Framework 4.5-Entwicklervorschau die neue Task.Run-Methode eingeführt. Dies macht Task.Factory.StartNew in keiner Weise überflüssig,
sondern sollte einfach als schnelle Möglichkeit zur Verwendung von
Task.Factory.StartNew angesehen werden, ohne dass eine Reihe von Parametern angegeben werden müssen. Es ist eine Abkürzung. Tatsächlich wird Task.Run in Bezug auf dieselbe Logik implementiert, die für Task.Factory.StartNew verwendet wird, wobei nur einige Standardparameter übergeben werden. Wenn Sie eine Aktion an Task.Run übergeben:
Task.Run(someAction);
das ist genau gleichbedeutend mit:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
standardmäßig in Verwendungen, beiTaskScheduler.Current
denen es sich möglicherweise um den Thread-Pool, aber auch um den UI-Thread handelt.