在c#中使用单个回调进行多个异步HTTP请求

本文关键字:异步 请求 HTTP 回调 单个 | 更新日期: 2023-09-27 18:02:20

我有一个简单的c#应用程序,它必须向许多服务器发送一个HTTP GET请求,并在按钮单击时从每个服务器获得响应。此外,我需要它执行一些操作后,所有的服务器响应。因此,我可以使用HttpWebRequest类与异步操作和计数总响应数在每个回调。但也许有一个特殊的库高级回调流控制,如Async在JavaScript为例?

在c#中使用单个回调进行多个异步HTTP请求

可以通过调用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调用。