我在某个页面的 LoadState 方法中执行异步请求。我使用 HttpClient 发出请求,我希望在等待结果时闪屏会消失。
如果我没有连接到任何网络,启动画面会立即消失,并且我会得到一个空白页面,因为请求显然没有发生。
但是,如果我连接到网络但有连接问题(例如,我设置了错误的 IP 地址),它似乎会启动一个请求并阻止。
我的期望是 HttpClient 会意识到它不能发送请求并且要么抛出异常,要么只返回一些东西。
我设法通过设置大约 800 毫秒的超时来解决阻塞问题,但现在当 Internet 连接正常时它无法正常工作。这是最好的解决方案,我应该设置超时吗?什么是适当的超时时间,这将使我能够区分无限期阻塞呼叫和仅在较慢网络上的正确呼叫?
我也许可以在每次请求之前检查互联网连接,但这听起来像是一个不可预测的解决方案......
编辑:现在,这真的很有趣。我又试了一次,它在这一点上阻塞:
var rd = await httpClient.SendAsync(requestMsg);
如果我按照评论中的建议使用 Task.Run() 并获得一个新线程,那么它总是可以的。但是,如果没有 Internet 访问权限但网络访问权限不是“受限”(它表示 IPv4 连接是“Internet 访问权限”,尽管我无法在浏览器中打开单个网站并且没有数据,那么没有 Task.Run() 也可以从 Web 服务返回。它只是抛出 System.Net.Http.HttpRequestException 这是我一开始就期待的)只有在网络连接受限时才会阻塞。