wait Task.Factory.StartNew (() => versus Task.Start; wait Task;

Existe-t-il une différence fonctionnelle entre ces deux formes d’utilisation?

  1. ssortingng x = await Task.Factory.StartNew(() => GetAnimal("feline")); 
  2.  Task myTask = new Task(() => GetAnimal("feline")); myTask.Start(); ssortingng z = await myTask; 

Plus précisément, dans quel ordre chaque opération est-elle appelée dans 1.? Est-ce que StartNew est appelé puis est appelé en attente ou est appelé en premier dans 1.?

StartNew est juste un raccourci pour créer et démarrer une tâche . Si vous souhaitez Task instance de Task avant de la démarrer, utilisez le constructeur. Si vous souhaitez simplement créer et démarrer la tâche immédiatement, utilisez la main courte.

La documentation de StartNew indique:

Appeler StartNew équivaut fonctionnellement à créer une tâche en utilisant l’un de ses constructeurs, puis à appeler la méthode Task.Start pour planifier l’exécution de la tâche.

Lorsque vous écrivez du code avec async et que vous await , vous devez utiliser Task.Run autant que possible.

Le constructeur de Task (et Task.Start ) sont des Task.Start de la bibliothèque de tâches parallèle, utilisées pour créer des tâches qui n’ont pas encore été démarrées. Le constructeur de Task et Task.Start ne doivent pas être utilisés dans du code async .

De même, TaskFactory.StartNew est une méthode plus ancienne qui n’utilise pas les meilleures valeurs par défaut pour les tâches async et ne comprend pas les lambdas async . Cela peut être utile dans quelques situations, mais la grande majorité du temps, Task.Run est préférable pour le code async .

Il n’y a pas de différence. Ils produisent exactement le même code IL.