2

アプリケーション:

  • 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 つの状況:

  1. ServerIPが Web API サービスを提供する適切な IP である場合、WPF アプリケーションは正常に動作します。
  2. ServerIPが適切な Web API サービスを提供しない既知の IP である場合、System.dll(SocketException -> WebException -> ObjectDisposedException -> HttpRequestException ->...これは正常なはずです) で例外が発生しますが、それでもWPF アプリケーションはクラッシュしません。
  3. ServerIPが存在しない場合、System.dll で例外が発生します( SocketException -> WebException -> ObjectDisposedException -> HttpRequestException -> 再び、これは正常なはずです) が、数分後に "System.Threading" が発生します。mscorlib.dllで.Tasks.TaskCanceledException" が発生し、WPF アプリケーションがクラッシュします。

質問:

  • 上記の状況 3 で TaskCanceledException を処理し、アプリケーションのクラッシュを防ぐにはどうすればよいですか?

Update1 :

  • 実は、TaskCanceledException をキャッチするのを忘れていました。これはもちろん、アプリケーション コードでキャッチできます。

それで、問題は解決しました。

4

0 に答える 0