Maison > développement back-end > C++ > Task.Start/Wait vs Async/Await dans .NET : quand dois-je utiliser chaque approche ?

Task.Start/Wait vs Async/Await dans .NET : quand dois-je utiliser chaque approche ?

Mary-Kate Olsen
Libérer: 2025-01-10 22:24:41
original
658 Les gens l'ont consulté

Task.Start/Wait vs. Async/Await in .NET: When Should I Use Each Approach?

Programmation asynchrone .NET : une discussion approfondie sur Task.Start/Wait et Async/Await

Le framework .NET fournit deux mécanismes de programmation asynchrone : Task.Start/Wait et Async/Await. Bien que les deux présentent des similitudes, il existe des différences significatives en termes de comportement et d’impact.

Tâche.Démarrer/Attendre

La méthode Task.Start/Wait nécessite de démarrer manuellement la tâche, puis d'utiliser la méthode Wait() pour attendre explicitement son achèvement. Il s'agit d'un modèle courant dans la programmation synchrone et convient principalement aux opérations de courte durée et non bloquantes. Le code utilisant Task.Start/Wait est similaire à :

<code class="language-csharp">public void MyMethod()
{
  Task t = Task.Factory.StartNew(DoSomethingThatTakesTime);
  t.Wait();
  UpdateLabelToSayItsComplete();
}</code>
Copier après la connexion

Créez et démarrez une nouvelle tâche en arrière-plan en appelant Task.StartNew(). La méthode Wait() bloque le thread actuel jusqu'à ce que la tâche soit terminée, garantissant que le code suivant (comme la mise à jour des étiquettes) n'est exécuté qu'une fois la tâche terminée.

Async/Attendre

Async/Await (introduit dans .NET 4.5) offre un moyen plus naturel et efficace de gérer les opérations asynchrones sans bloquer le thread actuel. Cette approche exploite les concepts de multitâche collaboratif et de continuation. Le code utilisant Async/Await ressemble à ceci :

<code class="language-csharp">public async void MyMethod()
{
  var result = Task.Factory.StartNew(DoSomethingThatTakesTime);
  await result;
  UpdateLabelToSayItsComplete();
}</code>
Copier après la connexion

Le mot-clé async demande au compilateur de traiter la méthode comme une méthode asynchrone. Lorsque le mot clé wait est rencontré, la méthode actuelle est suspendue, l'opération asynchrone continue sur le thread du pool de threads et le contrôle est rendu à l'appelant. Lorsque la tâche attendue se termine, la suite associée à wait renvoie l'exécution à la méthode d'origine.

Différences clés

La principale différence entre Task.Start/Wait et Async/Await est la façon dont ils gèrent les threads. Task.Start/Wait crée et démarre une tâche en arrière-plan qui s'exécute indépendamment du thread actuel. Cela peut conduire à un trop grand nombre de threads si un grand nombre de tâches en arrière-plan sont créées simultanément.

Async/Await, en revanche, ne crée pas de nouveaux threads. Il cède le thread actuel au pool de threads et attend la fin de l’opération asynchrone. Une fois terminée, la continuation est exécutée sur le thread du pool de threads qui a initialement appelé l'opération d'attente, garantissant ainsi une sémantique de thread correcte et réduisant le risque de sur-threading.

Quand utiliser quelle méthode

Task.Start/Wait convient aux opérations asynchrones simples qui ne nécessitent pas de mises à jour ou de réponses supplémentaires. Il peut également être utilisé dans des situations où vous devez bloquer un thread intentionnellement, par exemple en attendant que l'utilisateur confirme une opération avant de continuer.

Async/Await est idéal pour les opérations interactives de longue durée avec l'utilisateur où l'interface utilisateur doit rester réactive et mise à jour. Il simplifie le traitement de plusieurs opérations asynchrones, évite la complexité de la gestion manuelle des tâches et garantit une utilisation efficace des threads.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal