C#DownloadStringTaskAsync:为什么未触发超时异常捕获?

时间:2019-02-14 10:05:15

标签: c# .net asynchronous async-await

如果我执行此操作并在其旁边运行Fiddler并为该请求设置一个断点以使其超时,那么为什么它不像应该的那样超时? (我使用await)

如果我将代码更改为DownloadString,它会.. ????

class MyWebClient : WebClient
  {
    protected override WebRequest GetWebRequest(Uri address)
    {
      WebRequest request = base.GetWebRequest(address);
      request.Timeout = 10;

      return request;
    }

  }

  public class TestIt
  {
    internal static async Task DoTest()
    {
      try
      {
        WebClient client = new MyWebClient();
        string result = await client.DownloadStringTaskAsync("https://www.google.com");
        // sync version works:
        // string result = client.DownloadString("https://www.google.com");
        Debug.Print(result);
      }
      catch (Exception ex)
      {
        Debug.Print(ex.Message);
      }
      finally
      {
        Debug.Print("finally");
      }
    }


  }

1 个答案:

答案 0 :(得分:0)

来自the docs

  

Timeout属性仅影响通过GetResponse方法发出的同步请求。要使异步请求超时,请使用Abort方法。

正如Kevin所提到的,对于现代异步代码,HttpClient通常是一个更好的选择。 HttpClient的设计是从头开始考虑异步的。