当我尝试以下代码时:
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();
此异步版本完全忽略任何超时值,包括ReadWriteTimeout
和ServicePoint.MaxIdleTime
我在MSDN的GetResponseAsync()
中找不到关于Timeout的任何内容现在我想知道它是否是GetResponseAsync()
中的错误或者我在这里使用异步的方式有什么问题?
按照解决方案解决问题。
await Task.Run(() => {
var varHttpResponse = varWebRequest.GetResponse();
});