【发布时间】:2012-10-17 10:19:04
【问题描述】:
如何一次启动多个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”响应一进来就能够处理。
我可以将这两个任务放在一个数组中,然后在循环中使用Task.WaitAny(),检查哪个任务完成并调用适当的处理程序,但是……这比普通的旧回调有什么好处?或者这不是 async/await 的真正预期用例?如果没有,我将如何将HttpClient.GetAsync() 与回调一起使用?
澄清一下——我所追求的行为类似于这个伪代码:
client.GetAsyncWithCallback("http://example.com/", HandleExample);
client.GetAsyncWithCallback("http://stackoverflow.com/", HandleStackoverflow);
【问题讨论】:
标签: c# asynchronous windows-8 async-await