Поведение тайм-аута в 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();
});