HttpClient.GetAsync()
一度に複数のリクエストを開始し、それぞれのレスポンスが返ってきたらすぐに処理するにはどうすればよいでしょうか? 最初に試したのは次のとおりです。
var response1 = await client.GetAsync("http://example.com/");
var response2 = await client.GetAsync("http://stackoverflow.com/");
HandleExample(response1);
HandleStackoverflow(response2);
もちろん、それはまだシーケンシャルです。それで、両方を同時に起動しようとしました:
var task1 = client.GetAsync("http://example.com/");
var task2 = client.GetAsync("http://stackoverflow.com/");
HandleExample(await task1);
HandleStackoverflow(await task2);
タスクが同時に開始されるようになったのは良いことですが、もちろんコードは次々と待機する必要があります。
私が欲しいのは、「example.com」の応答をすぐに処理できるようにすることと、「stackoverflow.com」の応答をすぐに処理できるようにすることです。
2 つのタスクを配列に入れてTask.WaitAny()
ループで使用し、どちらが終了したかを確認して適切なハンドラーを呼び出すこともできますが、それでは、通常の古いコールバックよりもどのように優れているのでしょうか。それとも、これは本当に async/await の意図された使用例ではないのでしょうか? そうでない場合、コールバックでどのように使用HttpClient.GetAsync()
しますか?
明確にするために-私が求めている動作は、次の擬似コードのようなものです:
client.GetAsyncWithCallback("http://example.com/", HandleExample);
client.GetAsyncWithCallback("http://stackoverflow.com/", HandleStackoverflow);