I have a simple C# app which must send one HTTP GET
request to many servers and get a response from each of them on button click. Also I need it to perform some operations after all servers responded. So, I can use HttpWebRequest
class with async operations and count total responses number in every callback. But maybe there's a special library for advanced callback flow control, like Async
in JavaScript for example?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You can call HttpWebRequest.GetResponseAsync
to obtain Task<WebResponse>
. Then call Task.WhenAll
to get another task, which ends when all other tasks end. To wait synchronously for all tasks, use Task.WaitAll
.
Example:
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);
// ...
}
Useful links: Task Parallel Library, Asynchronous Programming with async and await
Also, I believe, System.Net.Http.HttpClient is a more convenient class for making HTTP calls.