Maison > développement back-end > C++ > « wait Task.WhenAll » et plusieurs attentes : quelle est la méthode préférée pour gérer plusieurs tâches asynchrones ?

« wait Task.WhenAll » et plusieurs attentes : quelle est la méthode préférée pour gérer plusieurs tâches asynchrones ?

Linda Hamilton
Libérer: 2025-01-20 07:26:09
original
494 Les gens l'ont consulté

`await Task.WhenAll` vs. Multiple Awaits: Which is the Preferred Method for Handling Multiple Asynchronous Tasks?

La méthode préférée pour l'exécution de tâches asynchrones : comparaison de await Task.WhenAll simples et multiples await

Dans la programmation asynchrone, lorsqu'ils gèrent plusieurs tâches, les développeurs doivent souvent choisir entre utiliser une seule instruction await Task.WhenAll ou exécuter plusieurs instructions await en séquence. Cet article explore les avantages de l'utilisation de await Task.WhenAll sur plusieurs await, en particulier dans les scénarios où l'ordre dans lequel les tâches sont accomplies n'est pas important.

L'extrait de code suivant montre les deux méthodes :

<code class="language-csharp">// 使用多个 await
static async Task DoWork1()
{
    var t1 = DoTaskAsync("t1.1", 3000);
    var t2 = DoTaskAsync("t1.2", 2000);
    var t3 = DoTaskAsync("t1.3", 1000);

    await t1; await t2; await t3;

    Console.WriteLine("DoWork1 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
}

// 使用 await Task.WhenAll
static async Task DoWork2()
{
    var t1 = DoTaskAsync("t2.1", 3000);
    var t2 = DoTaskAsync("t2.2", 2000);
    var t3 = DoTaskAsync("t2.3", 1000);

    await Task.WhenAll(t1, t2, t3);

    Console.WriteLine("DoWork2 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
}</code>
Copier après la connexion

Pourquoi await Task.WhenAll vaut-il mieux que plusieurs await ?

  1. Propagation des erreurs : await Task.WhenAll collecte toutes les erreurs de diverses tâches et les propage sous forme de AggregateException. Cela garantit que si une ou plusieurs tâches échouent, aucune erreur n’est perdue. Plusieurs await masqueront les erreurs lorsque le await précédent lèvera une exception.

  2. Achèvement garanti : await Task.WhenAll Garantit que toutes les tâches seront terminées avant leur retour, même si certaines tâches comportent des erreurs ou ont été annulées. Ceci est particulièrement utile lorsque votre code repose sur les résultats de toutes les tâches disponibles.

  3. Simplifiez votre code : Utilisez await Task.WhenAll pour rendre explicite la sémantique de l'attente de plusieurs tâches dans votre code, améliorant ainsi la lisibilité et réduisant le risque de bugs liés à la concurrence.

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