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();
此异步版本完全忽略任何超时值,包括ReadWriteTimeout
和ServicePoint.MaxIdleTime
我在MSDN的GetResponseAsync()
找不到关于Timeout的任何内容现在我想知道它是否是GetResponseAsync()
中的错误或者我在这里使用async的方式有什么问题?
Timeout
不适用于异步HttpWebRequest
请求。 引用文档 :
Timeout属性对异步请求没有影响
我建议您使用HttpClient
,它的设计考虑了异步请求。
按照解决方案解决问题。
await Task.Run(() => { var varHttpResponse = varWebRequest.GetResponse(); });