Ich habe nur wenige asynchrone REST-Services, die nicht voneinander abhängig sind. Während ich auf eine Antwort von Service1 "warte", kann ich Service2, Service3 usw. anrufen.
Zum Beispiel siehe unten Code:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
Nun service2Responseist nicht abhängig vonservice1Response und sie können unabhängig abgerufen werden. Daher muss ich nicht auf die Antwort des ersten Dienstes warten, um den zweiten Dienst anzurufen.
Ich glaube nicht, dass ich es gebrauchen kann Parallel.ForEach , da es sich nicht um eine CPU-gebundene Operation handelt.
Kann ich use aufrufen, um diese beiden Operationen gleichzeitig aufzurufen Task.WhenAll? Ein Problem bei der Verwendung Task.WhenAllist, dass keine Ergebnisse zurückgegeben werden. Um das Ergebnis abzurufen, kann ich task.Resultnach dem Aufruf anrufen Task.WhenAll, da alle Aufgaben bereits erledigt sind und ich uns nur noch eine Antwort holen muss?
Beispielcode:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
Ist dieser Code in Bezug auf die Leistung besser als der erste? Irgendein anderer Ansatz, den ich verwenden kann?
Parallel.ForEachneue Threads erzeugt werden, während async awaitalles in einem einzigen Thread ausgeführt wird.
await) zu verwenden, bevor sie fertig ist.
WhenAllich davon aus, Resultdass alle Aufgaben abgeschlossen sind, bevor .Result aufgerufen wird. Da Task.Result den aufrufenden Thread blockiert, gehe ich davon aus, dass wenn ich ihn nach Abschluss der Tasks aufrufe, er das Ergebnis sofort zurückgibt. Ich möchte das Verständnis bestätigen.
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- Ich sehe die Logik dort nicht. Parallelität ist Parallelität.