So bestimmen Sie, wann alle Aufgaben abgeschlossen sind

7

Hier ist ein Beispielcode zum Starten mehrerer Aufgaben

%Vor%

Wenn wir mehrere Aufgaben mit Task.Factory.StartNew() starten, können wir mit .ContinueWith() block ermitteln, wann die einzelnen Aufgaben beendet werden. Ich meine ContinueWith Block Feuer für jeden Task Abschluss. Ich möchte nur wissen, ob es einen Mechanismus in der TPL-Bibliothek gibt. Wenn ich 10 Aufgaben mit Task.Factory.StartNew() starte, wie melde ich mich danach wenn 10 Aufgaben beendet werden. Bitte geben Sie einen Einblick in den Beispielcode.

    
Thomas 10.06.2013, 10:26
quelle

3 Antworten

19
  

wenn ich 10 Aufgabe mit Task.Factory.StartNew () beginne, also wie benachrichtige ich, wenn 10 Aufgabe beendet wird

Drei Optionen:

  • Der blockierende Task.WaitAll Aufruf, der erst zurückkehrt, wenn alle angegebenen Aufgaben abgeschlossen sind
  • Der asynchrone Task.WhenAll Aufruf, der zurückgibt eine Aufgabe, die abgeschlossen wird, wenn alle angegebenen Aufgaben abgeschlossen sind. (Eingeführt in .NET 4.5.)
  • TaskFactory.ContinueWhenAll , das eine Fortsetzungsaufgabe hinzufügt, die ausgeführt wird, wenn alle angegebenen Aufgaben abgeschlossen sind.
Jon Skeet 10.06.2013, 10:29
quelle
1
  

wenn ich 10 Aufgabe mit Task.Factory.StartNew () beginne, also wie benachrichtige ich, wenn 10 Aufgabe beendet wird

Sie können Task.WaitAll verwenden. Dieser Aufruf blockiert den aktuellen Thread, bis alle Aufgaben abgeschlossen sind.

Randnotiz: Sie scheinen Task , Parallel und Thread.SpinWait zu verwenden, was Ihren Code komplex macht. Ich würde ein bisschen Zeit damit verbringen zu analysieren, ob diese Komplexität wirklich notwendig ist.

    
oleksii 10.06.2013 10:30
quelle
1

Sie können WaitAll () verwenden. Beispiel:

%Vor%     
Mez 10.06.2013 10:30
quelle

Tags und Links