Mehrere asynchrone Aufgaben in C# effizient ausführen
Beim Umgang mit asynchronem Code ist es entscheidend, die effizienteste Methode zur gleichzeitigen Ausführung mehrerer Aufgaben zu wählen. In diesem Artikel werden zwei gängige Methoden untersucht, um dies zu erreichen: Parallel.ForEach
kombiniert mit Wait()
und Task.WaitAll()
.
Verwenden Sie Parallel.ForEach und Wait()
Parallel.ForEach()
kombiniert mit Wait()
kann mehrere Aufgaben parallel starten, blockiert jedoch jeden teilnehmenden Thread, bis die Aufgabe abgeschlossen ist. Dieser Ansatz ist ineffizient, wenn Netzwerkvorgänge viel Zeit in Anspruch nehmen, da jeder Thread lange Zeit im Leerlauf ist.
Verwenden Sie Task.WaitAll()
Task.WaitAll()
blockiert außerdem den aktuellen Thread, bis alle Aufgaben abgeschlossen sind. Während diese Methode sicherstellt, dass alle Aufgaben abgeschlossen sind, bevor fortgefahren wird, verhindert sie, dass der aktuelle Thread andere Arbeiten ausführt.
Empfohlene Methode: Task.WhenAll()
Um mehrere asynchrone Aufgaben effizient auszuführen, wird die Verwendung von Task.WhenAll()
empfohlen. Diese Methode startet Aufgaben gleichzeitig, ohne Threads zu blockieren. Wenn Aufgaben abgeschlossen sind, warten sie automatisch, sodass der aktuelle Thread mit der Verarbeitung fortfahren kann.
Das Folgende ist ein Beispiel für die Verwendung von Task.WhenAll()
:
<code class="language-csharp">public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
Durch die Verwendung von Task.WhenAll()
führt die obige Methode alle Aufgaben asynchron aus, ohne den aktuellen Thread zu blockieren. Um die Leistung weiter zu optimieren, können Sie, wenn keine nachfolgenden Vorgänge vorhanden sind, die Verwendung von await
vermeiden und direkt von der Methode zurückkehren.
Weitere Ressourcen
Weitere Informationen zu diesen Alternativen finden Sie im folgenden Blogbeitrag:
Das obige ist der detaillierte Inhalt vonWie kann man mehrere asynchrone Aufgaben in C# effizient ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!