Wie startest du mehrere HttpClient.GetAsync()
-Anfragen gleichzeitig und behandelst sie, sobald ihre jeweiligen Antworten zurückkommen? Zuerst habe ich versucht:
Aber natürlich ist es immer noch sequenziell. Also habe ich versucht, sie beide gleichzeitig zu starten:
%Vor%Jetzt werden die Aufgaben gleichzeitig gestartet , was gut ist, aber natürlich muss der Code immer noch nacheinander warten.
Ich möchte die Antwort "example.com" so bald wie möglich verarbeiten und die Antwort "stackoverflow.com", sobald sie eintrifft.
Ich könnte die beiden Aufgaben in ein Array setzen und in einer Schleife Task.WaitAny()
verwenden, prüfen, welche beendet wurde und den entsprechenden Handler aufrufen, aber dann ... wie ist das besser als nur normale alte Callbacks? Oder ist das nicht wirklich ein beabsichtigter Anwendungsfall für async / erwarten? Wenn nicht, wie würde ich HttpClient.GetAsync()
mit Rückrufen verwenden?
Um zu verdeutlichen - das Verhalten, nach dem ich suche, ist so etwas wie dieser Pseudocode:
%Vor%Sie können eine Methode verwenden, die sie nach ihrer Fertigstellung neu anordnet. Dies ist ein schöner Trick, der von beschrieben wird Jon Skeet und Stephen Toub und auch von meiner AsyncEx-Bibliothek unterstützt.
Alle drei Implementierungen sind sehr ähnlich. Nehmen Sie meine eigene Implementierung:
%Vor%Sie können es dann als solches verwenden:
%Vor% Ein anderer Ansatz besteht darin, TPL Dataflow zu verwenden; Sobald die Aufgabe abgeschlossen ist, posten Sie ihre Operation in ActionBlock<T>
, etwa so:
Eine der obigen Antworten wird gut funktionieren. Wenn der Rest Ihres Codes TPL Dataflow verwendet / verwenden könnte, bevorzugen Sie möglicherweise diese Lösung.
Tags und Links c# async-await asynchronous windows-8