.Net TPL Experten,Benachrichtigen Aufgabe, wenn andere Aufgaben vollständig
Hinweis: Kann nicht Dataflow-Bibliothek verwenden; keine Add-ons erlaubt.
Ich habe vier Aufgaben, wie unten in der Abbildung dargestellt:
Task_1 (data_producer) -> liest Datensätze aus einer großen Datei (> 500000 Datensätze) und fügt Datensätze in eine Blocking
task_2, task_3 (data_consumers) -> Jede dieser Aufgaben nimmt Datensätze aus der BlockingCollection. Jede Task führt einige Arbeiten an dem aus der BlockingCollection entnommenen Datensatz aus (netzwerkbezogen). Nach Abschluss kann jede Task der Ergebnisliste einen Datensatz hinzufügen. Reihenfolge der Verarbeitung ist NICHT wichtig.
task_4 (Ergebnisprozessor) -> Nimmt Datensätze aus result_queue und schreibt in eine Ausgabedatei.
ich dann warten, bis die Aufgaben zu erledigen, d.h .:
Task.WhenAll(t1, t2, t3, t4)
So habe ich eine Produzenten Aufgabe, MEHR Verbraucher Aufgaben und eine Aufgabe für die Ergebnisse zu speichern.
Meine Frage ist:
Wie kann ich mitteilen Aufgabe 4, wenn Aufgaben 2 und 3 abgeschlossen sind, so dass auch Aufgabe 4 weiß, wann zu beenden?
Ich habe viele Beispiele gefunden, die Daten von EINER Aufgabe auf eine lineare "Pipeline" -Mode "bewegen", aber keine Beispiele gefunden haben, die das Obige illustrieren; das heißt, wie Task 4 benachrichtigt wird, wenn Task 2 und 3 abgeschlossen sind, so dass es weiß, wann auch abgeschlossen werden soll.
Mein erster Gedanke ist es, Aufgabe 2 und 3 mit Aufgabe 4 zu "registrieren" und einfach den Status jeder registrierten Aufgabe zu überwachen - wenn Aufgabe 2 und 3 nicht mehr laufen, dann kann Aufgabe 4 stoppen (wenn die Ergebnisse Warteschlange ist auch leer).
Vielen Dank im Voraus.
Sie können das [NuGet Paket für 'TPL Dataflow'] (https://www.nuget.org/packages/Microsoft.Tpl.Dataflow) für Ihr Projekt nicht hinzufügen? – VMAtm
Richtig - für dieses spezielle Projekt ist TPL Dataflow nicht erlaubt. – bdcoder