在c#中使用单个回调进行多个异步HTTP请求
本文关键字:异步 请求 HTTP 回调 单个 | 更新日期: 2023-09-27 18:02:20
我有一个简单的c#应用程序,它必须向许多服务器发送一个HTTP GET
请求,并在按钮单击时从每个服务器获得响应。此外,我需要它执行一些操作后,所有的服务器响应。因此,我可以使用HttpWebRequest
类与异步操作和计数总响应数在每个回调。但也许有一个特殊的库高级回调流控制,如Async
在JavaScript为例?
可以通过调用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);
// ...
}
有用的链接:任务并行库;使用async和await的异步编程
而且,我相信System.Net.Http.HttpClient是一个更方便的类来进行HTTP调用。