La deuxième méthode, Task.Run
a été introduite dans une version ultérieure du framework .NET (dans .NET 4.5).
Cependant, la première méthode Task.Factory.StartNew
,, vous donne la possibilité de définir beaucoup de choses utiles sur le fil que vous souhaitez créer, mais Task.Run
ne fournit pas cela.
Par exemple, disons que vous souhaitez créer un fil de tâche de longue durée. Si un thread du pool de threads va être utilisé pour cette tâche, cela peut être considéré comme un abus du pool de threads.
Une chose que vous pourriez faire pour éviter cela serait d'exécuter la tâche dans un thread séparé. Un thread nouvellement créé qui serait dédié à cette tâche et serait détruit une fois votre tâche terminée. Vous ne pouvez pas y parvenir avec le Task.Run
, alors que vous pouvez le faire avec le Task.Factory.StartNew
, comme ci-dessous:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
Comme il est indiqué ici :
Ainsi, dans le .NET Framework 4.5 Developer Preview, nous avons introduit la nouvelle méthode Task.Run. Cela ne rend nullement obsolète Task.Factory.StartNew,
mais devrait plutôt être simplement considéré comme un moyen rapide d'utiliser
Task.Factory.StartNew sans avoir besoin de spécifier un tas de paramètres. C'est un raccourci. En fait, Task.Run est en fait implémenté en termes de la même logique que celle utilisée pour Task.Factory.StartNew, en passant simplement quelques paramètres par défaut. Lorsque vous passez une action à Task.Run:
Task.Run(someAction);
c'est exactement équivalent à:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
par défaut les utilisationsTaskScheduler.Current
qui peuvent être le pool de threads mais également le thread d'interface utilisateur.