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

问题描述 投票:0回答:1

如果我执行此操作并在它旁边运行Fiddler并为请求设置断点以使其超时..为什么它不会像它应该超时? (我用等待)

如果我将代码更改为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");
      }
    }


  }
c# .net asynchronous async-await
1个回答
0
投票

来自the docs

Timeout属性仅影响使用GetResponse方法进行的同步请求。要使异步请求超时,请使用Abort方法。

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

© www.soinside.com 2019 - 2024. All rights reserved.