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>
Pourquoi await Task.WhenAll
vaut-il mieux que plusieurs await
?
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.
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.
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!