erwarten in Parallel.foreach [duplizieren]

8

Ich habe eine asynchrone Methode, die in Parallel.Foreach verwendet wird. In der asynchronen Methode wird auf eine Aufgabe gewartet. Im Test scheint es jedoch kein Warteverhalten zu geben, die Warten-Aufgabe wurde nicht abgeschlossen. Was ist das Problem? Unten ist der Code.

%Vor%     
user1438980 12.04.2013, 08:12
quelle

2 Antworten

6

Spät, um zu antworten, aber es sieht so aus, als würden Sie versuchen, CPU-gebundene Arbeit parallel auszuführen, im Gegensatz zur asynchronen Ausführung von E / A-gebundenen Arbeiten. Parallel.ForEach kümmert sich um Ihre Parallelität, so dass kein Bedarf für Task.Run und async / await Ihnen nichts bringt. Ich würde vorschlagen, diese Bits von method2 zu entfernen, also vereinfacht sich das Ganze zu:

%Vor%     
Todd Menier 06.01.2014 17:33
quelle
2

void async Methoden sind "Feuer und Vergessen" und es gibt keine Möglichkeit zu warten, bis sie abgeschlossen sind. Wenn method2 in Ihrer parallelen Schleife aufgerufen wird, kehrt es sofort zurück, sodass Ihre Schleife nur dafür sorgt, dass die Aufgaben in method2 erstellt werden, bevor die Schleife abgeschlossen ist.

Sie können den Rückgabetyp von method2 in Task ändern, wodurch Sie auf das Ergebnis der Operation warten können, z. B.

%Vor%

auf die Sie in Ihrer Schleife mit

warten können %Vor%

Dies ist jedoch nicht besser, als den Rumpf der Aufgabe in method2 direkt in Ihrem foreach-Delegaten ablaufen zu lassen.

    
Lee 12.04.2013 08:29
quelle