[英]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.