C # DownloadStringTaskAsync: почему не срабатывает ловушка исключения тайм-аута? - PullRequest
0 голосов
/ 14 февраля 2019

Если я выполню это и запусту 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 голосов
/ 14 февраля 2019

С документы :

Свойство Timeout влияет только на синхронные запросы, выполненные методом GetResponse.Для тайм-аута асинхронных запросов используйте метод Abort.

Как уже упоминал Кевин, для современного асинхронного кода HttpClient обычно является лучшим выбором.HttpClient был разработан с нуля с учетом асинхронности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...