Asynchronous 来自未知IP地址的GetAsync导致应用程序崩溃

Asynchronous 来自未知IP地址的GetAsync导致应用程序崩溃,asynchronous,asp.net-web-api,httpclient,Asynchronous,Asp.net Web Api,Httpclient,应用: 使用HttpClient从Web API异步获取数据的WPF应用程序(例如:http:///api/GetData)) 获取数据间隔:3s 示例代码: //initialize _httpClient.BaseAddress = new Uri("http://192.168.1.100"); _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("ap

应用:

  • 使用HttpClient从Web API异步获取数据的WPF应用程序(例如:http:///api/GetData))
  • 获取数据间隔:3s
示例代码:

    //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
    //......
三种情况:

  • ServerIP是提供webapi服务的正确服务器时,WPF应用程序工作正常
  • 服务器IP是一个已知的IP,它没有提供正确的Web API服务,这将导致System.dll中出现异常(SocketException->WebException->ObjectDisposedException->HttpRequestException->这应该是正常的),但WPF应用程序仍然不会崩溃
  • 当服务器IP不存在时,系统.dll中出现异常(SocketException->WebException->ObjectDisposedException->HttpRequestException->再次出现,这应该是正常的),但几分钟后,它将在mscorlib.dll中出现“System.Threading.Tasks.TaskCanceledException”,然后WPF应用程序崩溃
  • 问题:

    • 如何处理上述情况3中的TaskCanceledException,并防止应用程序崩溃
    更新1

    • 实际上,我忘了捕获TaskCanceledException,这当然可以在应用程序代码中捕获

    所以,问题解决了

    您能展示一些代码吗?为什么不捕捉异常?用try-catch,或者如果你是“射击和遗忘”,继续犯错。在.NET中,当任务引发异常且未捕获时,进程将终止。这些异常将在System.dll和mscorlib.dll中引发,因此无法捕获它们。因此异常不会传播到代码中?等待的函数永远不会返回?这是一种非常奇怪的行为。在系统或mscorlib中引发异常是正常的,您确定没有运行导致此问题的任何其他任务吗?重复的getdata线程是唯一一个(SocketException->WebException->ObjectDisposedException->HttpRequestException->…)指示http连接未成功创建并返回。我很好奇,在情况2中,应用程序没有崩溃。