【问题标题】:timeout handling with web request using async await使用 async await 处理 Web 请求的超时
【发布时间】:2013-08-03 01:47:22
【问题描述】:

在本演练中:

       http://msdn.microsoft.com/en-us/library/vstudio/hh300224.aspx

如何修改异步方法以处理超时情况?

     using (WebResponse response = await req.GetResponseAsync())
     {

     }

还是必须采取不同的方法?

【问题讨论】:

    标签: c# timeout async-await c#-5.0


    【解决方案1】:

    进行async HTTP 请求的最简单方法是使用HttpClient 而不是WebRequest,并且HttpClient 有一个Timeout property 可以设置。

    【讨论】:

    • 斯蒂芬,有没有你可以推荐的演练或博客文章?几天来,我一直在兜圈子,遇到了不推荐使用 C#5.0 的已弃用解决方案。我希望找到一个示例来执行异步 Web 请求,处理超时,并在每个此类请求后更新 UI 并带有状态(好、坏、超时)。最终我想在一个紧密的循环中发出这样的请求,以便它们中的许多可以同时处于活动状态。我正在检查一个包含 10 万个 url 的数据库,看看哪些是好的/移动的/慢的。
    • 我不知道有这样的资源。不过,看起来编程并不难;只需定义一个async 辅助方法来处理异常并将它们转换为适当的返回值。
    • 我看到的 WebRequest 的优点是它有一个 HEAD 方法,而我在 HttpClient 中找不到对应的方法。但后来我找到了它:social.msdn.microsoft.com/Forums/windowsapps/en-US/…
    【解决方案2】:

    WebRequest 对象上设置Timeout 属性

    【讨论】:

    【解决方案3】:

    遵循遵守超时的解决方案

    await Task.Run(() => {
       var varHttpResponse = varWebRequest.GetResponse();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 2018-01-28
      相关资源
      最近更新 更多