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% 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:
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.
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.
Tags und Links c# task-parallel-library async-await parallel.foreach