簡體   English   中英

HttpWebRequest.GetResponse() 與 GetResponseAsync() 中的超時行為

[英]Timeout behaviour in HttpWebRequest.GetResponse() vs 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()找不到任何關於超時的信息,現在我想知道這是GetResponseAsync()中的錯誤還是我在這里使用異步的方式有問題?

Timeout不適用於異步HttpWebRequest請求。 引用文檔

Timeout 屬性對異步請求沒有影響

我建議您改用HttpClient ,它的設計考慮了異步請求。

按照解決方案解決問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM