簡體   English   中英

設置超時時HttpClient掛起(Windows Phone)

[英]HttpClient hangs when timeout is setting (Windows Phone)

我正在嘗試在Windows Phone App中將超時設置為HttpClient對象。 但是如果請求在超時之前沒有完成,則GetAsync永遠不會返回值。

我正在使用以下代碼來獲得響應:

HttpClientHandler handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);
client.Timeout = TimeSpan.FromSeconds(5);
client.BaseAddress = new Uri("http://www.foo.com");
HttpResponseMessage response = await client.GetAsync("/boo.mp3");//<--Hangs
byte[] data = await response.Content.ReadAsByteArrayAsync();

如何正確設置超時以從GetAsync獲取結果?

取自HttpClient文檔

默認值為100,000毫秒(100秒)。

域名系統(DNS)查詢最多可能需要15秒才能返回或超時。 如果您的請求包含需要解析的主機名,並且您將Timeout設置為小於15秒的值,則可能需要15秒或更長時間才能引發WebException以指示請求超時。

並且正如ZombieSheep所說,即使DNS查詢完成,5秒也不夠。

我建議刪除超時並讓它為默認值,因為從我所知道的“檢查”任務沒有停止的唯一方法是假設如果你ping服務器並且它回復連接仍然是“好的” “並且正在處理/下載您的文件。

沒有去編寫代碼來檢查,這里有一些可能的罪魁禍首。

1)您的5秒超時不足以下載完整文件“boo.mp3”,因此超時會停止操作。
2)您的Web服務器響應時間太長(不太可能,但可能通過移動網絡)

最好是完全刪除超時值,或將其設置為更實際的值。

暫無
暫無

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

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