Поведение тайм-аута в HttpWebRequest.GetResponse () vs GetResponseAsync()

когда я пробую следующий код:

var request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Timeout = 3; // a small value

var response = request.GetResponse();
Console.WriteLine(response.ContentLength);

для URL-адреса, который я знаю, потребуется более 3 миллисекунд для загрузки (я поставил Thread.Sleep(110000) на Application_BeginRequest) он отлично работает и бросает!--5--> как и ожидалось.

проблема в том, когда я переключаюсь на асинхронный метод:

var response = request.GetResponseAsync().Result;

или

var response = await request.GetResponseAsync();

эта асинхронная версия полностью игнорирует любое значение тайм-аута, включая ReadWriteTimeout и ServicePoint.MaxIdleTime

Я ничего не мог найти о таймауте в MSDN GetResponseAsync() теперь мне интересно, если это ошибка в GetResponseAsync() или что-то не так в том, как я использую async здесь?

2 ответов


Timeout не применяется к асинхронному HttpWebRequest запросы. Цитата документы:

свойство Timeout не влияет на асинхронные запросы

Я рекомендую вам использовать HttpClient вместо этого, который был разработан с учетом асинхронных запросов.


следуйте решению для решения проблемы.

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