Windows Store未处理的TP线程异常不会使应用程序崩溃
本文关键字:应用程序 崩溃 异常 线程 Store 未处理 TP Windows | 更新日期: 2023-09-27 18:11:58
我有一个正在抛出的异步方法。这对我的应用程序没有影响,我在调试器输出窗口中看到异常。
我可以打开第一次机会异常,并让VS调试器在预期的地方捕获它,即当调用返回await
关键字时。
但是,我希望这个异常会使我的应用程序崩溃。
从。net Framework 2.0版本开始,通用语言运行时允许线程中大多数未处理的异常继续进行自然。在大多数情况下,这意味着未处理的异常导致应用程序终止。
为什么不呢?——我已经找到了答案,所以我将发布Q/A风格,以使其对其他人有用。
原因是我从async void
呼叫深。异常被捕获并放入从当前异步方法返回的Task
中,该过程在每次异步调用堆栈时发生。
当它到达async void
时问题就来了,没有Task
对象,通过它可以将异常编组回主进程线程。
考虑到UI工作的事件驱动性质,在堆栈的顶部有一个async void
是很常见的,所以这是一个会被击中几次的陷阱。
从现在开始,我将确保在事件处理程序中的代码周围包装一个try catch
。