Est-ce que quelqu'un sait s'il y a une différence entre faire Task.Factory.StartNew
contre new Task
suivi de l'appel de Start
sur la tâche. En regardant le réflecteur, il ne semble pas y avoir beaucoup de différence. Alors peut-être que la seule différence est que Task.Factory.StartNew
retourne une tâche déjà démarrée. Est-ce correct?
Je le sais Task.Factory.StartNew
et Task.Run
ont différentes options par défaut et Task.Run
est l'option préférée pour .Net 4.5.
J'ai trouvé this excellent article de Stephen Toub, qui explique qu'il y a en fait une pénalité de performance lors de l'utilisation de new Task(...).Start()
, car la méthode de démarrage doit utiliser la synchronisation pour s'assurer que la tâche n'est que prévu une fois.
Son conseil est de préférer utiliser Task.Factory.StartNew
pour .net 4.0. Pour .net 4.5 Task.Run
est la meilleure option .
En fait dans l'article de Stephen Toub il spécifie que Task.Run () est exactement équivalent à l'utilisation de Task.Factory.StartNew () avec les paramètres par défaut:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);