我在某个页面的LoadState方法中做异步请求。我使用HttpClient发出请求,我希望在等待结果时闪屏会消失。
如果我没有连接到任何网络,闪屏立即消失,我得到一个空白页面,因为请求显然没有发生。
但是,如果我连接到一个网络,但有连接问题(例如,我设置了错误的IP地址),它似乎启动了一个请求,并只是阻止。
我的期望是HttpClient会意识到它不能发送请求并抛出异常或只是返回一些东西。
我设法解决了阻塞的问题,将超时设置为800毫秒左右,但现在当互联网连接正常时,它不能正常工作。这是最好的解决方案吗,我应该设置超时吗?什么是适当的超时,这将使我能够区分无限期阻塞调用和仅在较慢网络上的适当调用?
我也许可以在每次请求之前检查互联网连接,但这听起来像是一个不可预测的解决方案……
编辑:现在,这真的很有趣。我再次尝试,但它在这一点上阻塞:
var rd = await httpClient.SendAsync(requestMsg);如果我按照注释中的建议使用Task.Run()并获得一个新的线程,那么它总是可以的。但是,如果没有互联网访问,但是网络访问不是“有限的”,那么没有Task.Run()也没问题(它说IPv4连接是“互联网访问”,尽管我不能在浏览器中打开一个网站,web服务也没有返回任何数据。它只是抛出System.Net.Http.HttpRequestException,这是我一开始就期待的事情)只有在网络连接受限时才会阻塞。
发布于 2013-01-31 01:11:59
如果不是设置超时,而是使用以下命令检查连接状态,该怎么办
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
https://stackoverflow.com/questions/14444431
复制相似问题