await Task.WhenAll
und mehreren await
Bei der asynchronen Programmierung müssen Entwickler bei der Bearbeitung mehrerer Aufgaben häufig zwischen der Verwendung einer einzelnen await Task.WhenAll
-Anweisung oder der Ausführung mehrerer await
-Anweisungen nacheinander wählen. In diesem Artikel werden die Vorteile der Verwendung von await Task.WhenAll
gegenüber mehreren await
s untersucht, insbesondere in Szenarien, in denen die Reihenfolge, in der Aufgaben erledigt werden, keine Rolle spielt.
Der folgende Codeausschnitt zeigt beide Methoden:
<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>
Warum ist await Task.WhenAll
besser als mehrere await
?
Fehlerweitergabe: await Task.WhenAll
sammelt alle Fehler aus verschiedenen Aufgaben und gibt sie als AggregateException
weiter. Dadurch wird sichergestellt, dass keine Fehler verloren gehen, wenn eine oder mehrere Aufgaben fehlschlagen. Mehrere await
verbergen Fehler, wenn das vorherige await
eine Ausnahme auslöst.
Garantierter Abschluss: await Task.WhenAll
Garantiert, dass alle Aufgaben vor ihrer Rückkehr abgeschlossen werden, auch wenn einige Aufgaben Fehler aufweisen oder abgebrochen wurden. Dies ist besonders nützlich, wenn Ihr Code darauf angewiesen ist, dass die Ergebnisse aller Aufgaben verfügbar sind.
Vereinfachen Sie Ihren Code: Verwenden Sie await Task.WhenAll
, um die Semantik des Wartens auf mehrere Aufgaben in Ihrem Code explizit zu machen, was die Lesbarkeit verbessert und das Risiko von Fehlern im Zusammenhang mit der Parallelität verringert.
Das obige ist der detaillierte Inhalt von„await Task.WhenAll' vs. Multiple Awaits: Welches ist die bevorzugte Methode für die Handhabung mehrerer asynchroner Aufgaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!