我正在尝试在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获取结果?
答案 0 :(得分:9)
默认值为100,000毫秒(100秒)。
域名系统(DNS)查询最多可能需要15秒才能返回 或者超时。如果您的请求包含需要的主机名 分辨率,你可以将Timeout设置为小于15秒的值 在抛出WebException之前需要15秒或更长时间来指示a 你的请求超时。
并且正如ZombieSheep所说,即使DNS查询完成,5秒也不够。
我建议删除超时并将其设为默认值,因为据我所知,“检查”任务是否停止的唯一方法是假设如果您ping服务器并且它回复连接是仍然“正常”并正在处理/下载您的文件。
答案 1 :(得分:2)
没有去编写代码来检查,这里有一些可能的罪魁祸首。
1)您的5秒超时时间不足以下载完整文件“boo.mp3”,因此超时会停止操作。
2)您的Web服务器响应时间太长(不太可能,但可能通过移动网络)
最好完全删除超时值,或将其设置为更实际的值。