Maison >développement back-end >C++ >Task.Start(), Task.Run() et Task.Factory.StartNew() : quand devez-vous les utiliser ?

Task.Start(), Task.Run() et Task.Factory.StartNew() : quand devez-vous les utiliser ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-12 09:32:46636parcourir

Task.Start(), Task.Run(), and Task.Factory.StartNew(): When Should You Use Each?

Compréhension approfondie de Task.Start(), Task.Run() et Task.Factory.StartNew()

La bibliothèque parallèle de tâches (TPL) offre plusieurs façons de créer et de planifier des opérations asynchrones. Cet article vise à clarifier les scénarios d'utilisation et les différences de Task.Start(), Task.Run() et Task.Factory.StartNew().

Comparaison de Task.Start(), Task.Run() et Task.Factory.StartNew()

Bien que les trois méthodes puissent créer et démarrer des tâches asynchrones, elles ont des fonctions et des utilisations différentes.

Task.Start()

Task.Start() est une méthode de bas niveau qui nécessite la création et la planification manuelles de tâches. Il a un contrôle limité sur l’exécution des tâches et n’est généralement pas recommandé pour la plupart des scénarios.

Task.Run()

Task.Run() fournit un raccourci vers Task.Factory.StartNew() avec des paramètres spécifiques et sûrs. Il crée une nouvelle tâche sur le planificateur par défaut, avec des options telles que le refus des pièces jointes enfants et l'utilisation des indicateurs d'annulation par défaut.

Task.Factory.StartNew()

Task.Factory.StartNew() est la méthode la plus flexible et la plus puissante. Il permet des options de création et de planification de tâches personnalisées, notamment :

  • TaskCreationOptions (par exemple DenyChildAttach, LongRunning)
  • Décocher
  • Planificateur (par exemple, ThreadPool, Thread.CurrentThread)

Quand utiliser chaque méthode

  • Task.Run() : Idéal pour les scénarios simples dans lesquels vous devez décharger du travail sur le pool de threads ou effectuer des opérations bon marché.
  • Task.Factory.StartNew() : Recommandé pour les scénarios plus complexes qui nécessitent un comportement d'exécution ou d'annulation spécifique. Il fournit un contrôle précis sur les propriétés des tâches.
  • Task.Start() : À utiliser uniquement si vous avez une raison spécifique de séparer la création et la planification des tâches. Cette situation est rare.

Résumé

Pour des raisons plus pratiques, Task.Run() est le principal choix pour les opérations asynchrones. Si vous avez besoin de plus de personnalisation, Task.Factory.StartNew() offre la flexibilité nécessaire. Cependant, évitez d'utiliser Task.Start() sauf si vous avez une bonne raison.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn