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