特定のページの LoadState メソッドで非同期リクエストを行います。私は HttpClient を使用してリクエストを行い、結果を待っている間にスプラッシュスクリーンが消えることを期待しています。
どのネットワークにも接続していない場合、スプラッシュスクリーンはすぐに消え、空白のページが表示されます。これは、リクエストが明らかに発生していないためです。
しかし、ネットワークに接続していても接続に問題がある場合 (たとえば、間違った IP アドレスを設定した場合)、リクエストが開始されてブロックされたように見えます。
私の期待は、HttpClient がリクエストを送信できないことを認識し、例外をスローするか、何かを返すことでした。
約 800 ミリ秒のタイムアウトを設定することでブロックの問題を解決することができましたが、現在、インターネット接続が正常なときに正しく動作しません。これが最善の解決策ですか? タイムアウトを設定する必要がありますか? 無期限にブロックしている通話と、低速のネットワーク上にある適切な通話を区別できる適切なタイムアウトは何ですか?
各リクエストの前にインターネット接続を確認することもできますが、それは予測できない解決策のように思えます...
編集:今、それは本当に面白いです。再試行しましたが、この時点でブロックされます:
var rd = await httpClient.SendAsync(requestMsg);
コメントで提案されているように Task.Run() を使用して新しいスレッドを取得すると、常に問題ありません。ただし、インターネット アクセスはなく、ネットワーク アクセスが「制限」されていない場合は、Task.Run() がなくても問題ありません (IPv4 接続は「インターネット アクセス」であると表示されていますが、ブラウザーで単一の Web サイトを開くことはできず、データもありません)。は Web サービスから返されます. System.Net.Http.HttpRequestException をスローするだけで、これは私が最初に期待していたものでした) ネットワーク接続が制限されている場合にのみブロックします。