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 service2Response
ist 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.WhenAll
ist, dass keine Ergebnisse zurückgegeben werden. Um das Ergebnis abzurufen, kann ich task.Result
nach 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.ForEach
neue Threads erzeugt werden, während async await
alles in einem einzigen Thread ausgeführt wird.
await
) zu verwenden, bevor sie fertig ist.
WhenAll
ich davon aus, Result
dass 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.