Maison >développement back-end >C++ >Task.Start/Wait vs Async/Await : quelle est la différence dans la gestion des opérations de longue durée ?

Task.Start/Wait vs Async/Await : quelle est la différence dans la gestion des opérations de longue durée ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 22:36:41272parcourir

Task.Start/Wait vs. Async/Await:  What's the Difference in Handling Long-Running Operations?

Task.Start/Wait vs. Async/Await : différences dans la gestion des opérations chronophages

Dans le monde de la programmation multi-thread et asynchrone, il est crucial de comprendre la différence entre les méthodes Task.Start/Wait et async/await. Ces deux technologies fournissent des mécanismes différents pour gérer les opérations chronophages, améliorant ainsi la réactivité et les performances des applications.

Task.Start/Wait : blocage synchrone

Dans la méthode Task.Start/Wait, utilisez Task.Factory.StartNew(Action) pour créer une nouvelle tâche et attribuez-lui un délégué pour effectuer l'opération fastidieuse. L'appel t.Wait() force ensuite le thread appelant à attendre la fin de l'exécution de la tâche.

Considérez l'extrait de code suivant :

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

Dans cet exemple, le thread appelant exécutera la méthode UpdateLabelToSayItsComplete() uniquement une fois l'opération DoSomethingThatTakesTime() terminée. Cette méthode bloque le traitement sur le thread appelant, retardant ainsi l'exécution d'autres tâches.

Async/Await : asynchrone non bloquant

En revanche, les méthodes async/await utilisent une programmation asynchrone pour effectuer des opérations fastidieuses sans bloquer le thread appelant. Le mot-clé async void permet à une méthode d'être asynchrone, où l'opérateur d'attente confie le contrôle à l'appelant jusqu'à ce que la tâche soit terminée.

Voici un extrait de code mis à jour utilisant async/await :

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

Dans ce cas, l'instruction de résultat wait suspend l'exécution de la méthode MyMethod() jusqu'à ce que la tâche DoSomethingThatTakesTime() soit terminée. Dans le même temps, le thread appelant est libre d’effectuer d’autres tâches.

Différences de compréhension par analogie

Imaginez un scénario de restaurant : vous commandez auprès du serveur, puis choisissez d'ignorer votre ami jusqu'à ce que la soupe arrive (Task.Wait), ou parlez à votre ami et demandez au serveur de vous livrer la soupe pendant que la discussion est en pause (async/ attendre).

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