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

当我尝试以下代码时:

var request = (HttpWebRequest)HttpWebRequest.Create(url); request.Timeout = 3; // a small value var response = request.GetResponse(); Console.WriteLine(response.ContentLength); 

对于我知道加载超过3毫秒的URL(我在Application_BeginRequest放置一个Thread.Sleep(110000) )它工作正常WebException预期抛出WebException

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

 var response = request.GetResponseAsync().Result; 

要么

 var response = await request.GetResponseAsync(); 

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

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

Timeout不适用于异步HttpWebRequest请求。 引用文档 :

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

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

按照解决方案解决问题。

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