C # TPL Wie zu wissen, dass alle Aufgaben erledigt sind?

8

Ich habe die Schleife, die Aufgaben erzeugt.

Code:

%Vor%

Wie Sie in jeder Iteration sehen können, hat das Task-Objekt eine neue Initialisierung (..new Task (() = & gt; ..)     Wie kann ich wissen, dass alle Aufgaben erledigt sind?

    
Yara 21.02.2011, 14:55
quelle

3 Antworten

23

Wenn Sie dies durch ein

ersetzen %Vor%

Dann erhalten Sie eine automatische Warte auf alle Aufgaben am Ende des ForEach.

Und vielleicht führe das ForEach von einer separaten Aufgabe aus.

    
Henk Holterman 21.02.2011, 15:00
quelle
12
%Vor%     
Software.Developer 21.02.2011 15:03
quelle
8

Sie müssen Verweise auf alle in der Schleife erstellten Aufgaben beibehalten. Dann können Sie die Task.WaitAll -Methode verwenden (siehe MSDN-Referenz ). Sie können entweder ein Array erstellen und den Elementen des Arrays Aufgaben zuweisen (in C # 2.0) oder Sie können LINQ:

verwenden %Vor%

Wenn Sie (explizit) keine Aufgaben verwenden müssen, ist Henks Vorschlag, Parallel.ForEach zu verwenden, wahrscheinlich eine bessere Option.

    
Tomas Petricek 21.02.2011 14:58
quelle

Tags und Links