我在某个Page的LoadState方法中执行异步请求。我使用HttpClient发出请求,我希望在等待结果时闪屏消失。
如果我没有连接到任何网络,那么启动画面会立即消失,我会得到一个空白页面,因为请求显然没有发生。
但是,如果我连接到网络但存在连接问题(例如,我设置了错误的IP地址),它似乎会启动请求并阻止。
我的期望是HttpClient会意识到它无法发送请求并抛出异常或只返回一些内容。
我设法通过设置大约800毫秒的超时来解决阻塞问题,但现在当Internet连接正常时它无法正常工作。这是最好的解决方案,我应该设置超时吗?什么是适当的超时,使我能够区分无限期阻塞呼叫和正好在较慢网络上的正确呼叫?
我可能会在每次请求之前检查互联网连接,但这听起来像是一种不可预测的解决方案......
编辑:现在,这真的很有趣。我再次尝试过,它阻止了这一点:var rd = await httpClient.SendAsync(requestMsg);
如果我按照评论中的建议使用Task.Run()并获得一个新的线程,那么它总是很好。 但是没有Task.Run(),如果没有Internet访问但网络访问不是“有限”(它表示IPv4连接是“Internet访问”,虽然我无法在浏览器中打开单个网站而没有数据从Web服务返回。它只是抛出System.Net.Http.HttpRequestException,这是我首先想到的东西)只有当网络连接受限时才会阻塞。
答案 0 :(得分:1)
如果不是设置超时,而是使用
检查连接状态,该怎么办?public static bool IsConnected
{
get
{
return NetworkInformation.GetInternetConnectionProfile() != null;
}
}
这样,如果IsConnected,则拨打电话;否则,忽略它。
我不确定你是否在App.xaml.cs中运行它?我发现在该类中发出的请求可能是变化无常的,最好将功能移动到扩展的启动屏幕,以确保应用程序在激活过程中始终如一。
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868191(v=win.10).aspx