アプリケーション:
- HttpClient を使用して Web API からデータを非同期に取得する WPF アプリケーション (例: "http://< ServerIP >/api/GetData")
- データ取得間隔: 3 秒;
サンプルコード:
//initialize
_httpClient.BaseAddress = new Uri("http://192.168.1.100");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//get data method
//......
var response = await _httpClient.GetAsync(uri); //called every 3 seconds
//......
3 つの状況:
- ServerIPが Web API サービスを提供する適切な IP である場合、WPF アプリケーションは正常に動作します。
- ServerIPが適切な Web API サービスを提供しない既知の IP である場合、System.dll(SocketException -> WebException -> ObjectDisposedException -> HttpRequestException ->...これは正常なはずです) で例外が発生しますが、それでもWPF アプリケーションはクラッシュしません。
- ServerIPが存在しない場合、System.dll で例外が発生します( SocketException -> WebException -> ObjectDisposedException -> HttpRequestException -> 再び、これは正常なはずです) が、数分後に "System.Threading" が発生します。mscorlib.dllで.Tasks.TaskCanceledException" が発生し、WPF アプリケーションがクラッシュします。
質問:
- 上記の状況 3 で TaskCanceledException を処理し、アプリケーションのクラッシュを防ぐにはどうすればよいですか?
Update1 :
- 実は、TaskCanceledException をキャッチするのを忘れていました。これはもちろん、アプリケーション コードでキャッチできます。
それで、問題は解決しました。