设置超时时HttpClient挂起(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秒的值,则在抛出WebException之前可能需要15秒或更长时间才能指示请求超时。

并且正如ZombieSheep所说,即使DNS查询完成,5秒也不够。

我建议删除超时并让它为默认值,因为据我所知,“检查”任务没有停止的唯一方法是假设如果你ping服务器并且它回复连接仍然是“好的” “并且正在处理/下载您的文件。

没有去编写代码来检查,这里有一些可能的罪魁祸首。

1)您的5秒超时不足以下载完整文件“boo.mp3”,因此超时会停止操作。
2)您的Web服务器响应时间太长(不太可能,但可能通过移动网络)

最好是完全删除超时值,或将其设置为更实际的值。