HttpWebRequest.GetResponse()与GetResponseAsync()中的超时行为

问题描述 投票:11回答:2

当我尝试以下代码时:

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)它工作正常,并按预期抛出WebException

问题是当我切换到异步方法时:

var response = request.GetResponseAsync().Result;

要么

var response = await request.GetResponseAsync();

此异步版本完全忽略任何超时值,包括ReadWriteTimeoutServicePoint.MaxIdleTime

我在MSDN的GetResponseAsync()中找不到关于Timeout的任何内容现在我想知道它是否是GetResponseAsync()中的错误或者我在这里使用异步的方式有什么问题?

c# httpwebrequest async-await
2个回答
17
投票

Timeout不适用于异步HttpWebRequest请求。引用the docs

Timeout属性对异步请求没有影响

我建议您使用HttpClient,它的设计考虑了异步请求。


0
投票

按照解决方案解决问题。

await Task.Run(() => { 
  var varHttpResponse = varWebRequest.GetResponse(); 
});
© www.soinside.com 2019 - 2024. All rights reserved.