【问题标题】:Make multiple async HTTP requests with a single callback in C# [closed]在 C# 中使用单个回调发出多个异步 HTTP 请求 [关闭]
【发布时间】:2016-08-13 18:28:27
【问题描述】:

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

【问题讨论】:

  • 解决这个问题的方法太多了。答案只会变成一个人们喜欢的稻草民意调查。最好的办法是自己对这个主题进行一些研究,找到两三个,分析它们,确定它们是否适合你,然后尝试一下。如果您对尝试做的事情有具体问题,请联系我们。
  • @FrankerZ 我只需要一个简单的回调库,它允许对多个异步操作进行单个回调。
  • 很遗憾,要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题在这里也不是主题。你可能会找到更好的运气SoftwareRecs.SE。记得阅读their question requirements,因为他们比这个网站更严格。

标签: c# http asynchronous callback httpwebrequest


【解决方案1】:

您可以拨打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 调用的类。

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2016-11-15
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2018-04-10
    • 2010-09-25
    • 2023-03-06
    • 2016-09-04
    相关资源
    最近更新 更多