Ich habe den folgenden Code:
%Vor%Es startet Aufgaben parallel. Wenn die erste abgeschlossene Aufgabe den Wert true zurückgibt, gibt die Methode true zurück.
Was passiert mit allen anderen Aufgaben, die gestartet wurden und wahrscheinlich noch im Hintergrund laufen? Ist das der richtige Ansatz, um einen Code auszuführen, der asynchron und parallel ist und nach dem Auftreten der ersten Bedingung zurückkehren sollte, oder es besser ist, sie nacheinander zu starten und einzeln zu warten?
Danke
Übrigens lese ich gerade Parallelität in C # CookBook , indem < Stephen Cleary , und ich kann hier auf einige Teile des Buches verweisen, denke ich.
Von Rezept 2.5 - Diskussion haben wir
Wenn die erste Aufgabe abgeschlossen ist, überlegen Sie, ob die verbleibenden Aufgaben abgebrochen werden sollen. Wenn die anderen Aufgaben nicht abgebrochen, aber auch nie erwartet werden, werden sie aufgegeben. Abgebrochene Aufgaben werden bis zum Abschluss ausgeführt, und ihre Ergebnisse werden ignoriert. Alle Ausnahmen von diesen abgebrochenen Aufgaben werden ebenfalls ignoriert.
Ein weiteres Antipattern für Task.WhenAny bearbeitet Aufgaben, wenn sie abgeschlossen sind. Zunächst scheint es ein sinnvoller Ansatz zu sein, eine Liste von Aufgaben zu führen und jede Aufgabe aus der Liste zu entfernen, wenn sie abgeschlossen ist. Das Problem bei diesem Ansatz ist, dass er in O (N ^ 2) -Zeit ausgeführt wird, wenn ein O (N) -Algorithmus existiert.
Abgesehen davon denke ich, dass WhenAny
sicherlich der richtige Ansatz ist. Denken Sie nur daran, dem CancellationToken
für jede Aufgabe und annulliere sie, nachdem die erste zurückgegeben wurde. Und zwar nur dann, wenn die Kosten dieser Operationen das System tatsächlich belasten.
Tags und Links c# task-parallel-library async-await