我有一个简单的C#应用程序,它必须向许多服务器发送一个HTTP GET
请求,并在按钮点击时从每个服务器获得响应。我还需要它在所有服务器响应后执行一些操作。因此,我可以使用HttpWebRequest
类进行异步操作,并计算每个回调中的总响应数。但也许有一个特殊的库用于高级回调流控制,例如JavaScript中的Async
?
答案 0 :(得分:2)
您可以致电HttpWebRequest.GetResponseAsync
获取Task<WebResponse>
。然后调用Task.WhenAll
以获取另一个任务,该任务在所有其他任务结束时结束。要同步等待所有任务,请使用Task.WaitAll
。
示例:
async void StartRequests()
{
// start requests
var responseTasks = requests
.Select(
r => HttpWebRequest.GetResponseAsync(r)
// you can attach continuation to every task
.ContinueWith(t => ProcessResult(t.Result)))
.ToArray();
// wait for all tasks to finish
await Task.WhenAll(responseTasks);
// ...
}
有用的链接: Task Parallel Library, Asynchronous Programming with async and await
另外,我相信,System.Net.Http.HttpClient是一个更方便的用于进行HTTP调用的类。