C# 设置超时时HttpClient挂起(Windows Phone)

C# 设置超时时HttpClient挂起(Windows Phone),c#,windows-phone-8,async-await,dotnet-httpclient,C#,Windows Phone 8,Async Await,Dotnet Httpclient,我正在尝试在Windows Phone应用程序中将超时设置为HttpClient对象。但若请求在超时之前未完成,GetAsync将永远不会返回值 我使用以下代码获得响应: HttpClientHandler handler=new-HttpClientHandler(); HttpClient=新的HttpClient(处理程序); client.Timeout=TimeSpan.FromSeconds(5); client.BaseAddress=新Uri(“http://www.foo.co

我正在尝试在Windows Phone应用程序中将超时设置为
HttpClient
对象。但若请求在超时之前未完成,
GetAsync
将永远不会返回值

我使用以下代码获得响应:

HttpClientHandler handler=new-HttpClientHandler();
HttpClient=新的HttpClient(处理程序);
client.Timeout=TimeSpan.FromSeconds(5);
client.BaseAddress=新Uri(“http://www.foo.com");

httpresponsemessageresponse=wait client.GetAsync(“/boo.mp3”)// 在没有编写代码进行检查的情况下,这里有一些可能的罪魁祸首

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

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

摘自:

默认值为100000毫秒(100秒)

域名系统(DNS)查询可能需要15秒才能返回 或者暂停。如果您的请求包含需要 分辨率,并将超时设置为小于15秒的值,则可能 在抛出WebException以指示错误之前,需要15秒或更长时间 根据您的请求超时

正如ZombieSheep所指出的,5秒钟甚至不足以完成DNS查询


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

是,它会停止操作。但我找不到检查任务是否因超时而停止的方法。@MikhailKamenev,您可以捕获HttpRequestException。e、 g.尝试{return await httpHandler.SendAsync(…);}catch(HttpRequestException e){}您到底是如何调用此方法的?您是否正在使用
Wait()
Result
?我有一个类似的问题。在我的例子中,我尝试使用..catch()在多个级别上包装任务中的所有内容,并记录所有内容,甚至在每个步骤之间。我有返回任务的方法,然后我登录,然后我对它执行I.Wait()。我使用的是默认超时(我猜是100秒?)。如果GetAsync()调用花费的时间太长,web服务无法响应,它将永远不会返回。它没有击中任何接球。它没有击中下一行(这是一个日志)。它永远挂着。