Windows Store未处理的TP线程异常不会使应用程序崩溃

本文关键字:应用程序 崩溃 异常 线程 Store 未处理 TP Windows | 更新日期: 2023-09-27 18:11:58

我有一个正在抛出的异步方法。这对我的应用程序没有影响,我在调试器输出窗口中看到异常。

我可以打开第一次机会异常,并让VS调试器在预期的地方捕获它,即当调用返回await关键字时。

但是,我希望这个异常会使我的应用程序崩溃。

从。net Framework 2.0版本开始,通用语言运行时允许线程中大多数未处理的异常继续进行自然。在大多数情况下,这意味着未处理的异常导致应用程序终止。

为什么不呢?——我已经找到了答案,所以我将发布Q/A风格,以使其对其他人有用。

Windows Store未处理的TP线程异常不会使应用程序崩溃

原因是我从async void呼叫深。异常被捕获并放入从当前异步方法返回的Task中,该过程在每次异步调用堆栈时发生。

当它到达async void时问题就来了,没有Task对象,通过它可以将异常编组回主进程线程。

考虑到UI工作的事件驱动性质,在堆栈的顶部有一个async void是很常见的,所以这是一个会被击中几次的陷阱。

从现在开始,我将确保在事件处理程序中的代码周围包装一个try catch

http://tomasp.net/blog/csharp-async-gotchas.aspx/