使用C#

时间:2016-08-13 10:06:58

标签: c# http asynchronous callback httpwebrequest

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

1 个答案:

答案 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 LibraryAsynchronous Programming with async and await

另外,我相信,System.Net.Http.HttpClient是一个更方便的用于进行HTTP调用的类。