HttpWebRequest.GetResponse()与GetResponseAsync()中的超时行为
本文关键字:超时 GetResponseAsync GetResponse HttpWebRequest | 更新日期: 2023-09-27 18:25:37
当我尝试以下代码时:
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
。
问题是当我切换到异步方法时:
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();
});