asp.net 中的未处理异常是否保证执行 finally 块?

Is a finally block guaranteed to be executed for an unhandled exception in asp.net?

本题When is finally run if you throw an exception from the catch block?

它解释了警告,即 finally-block 保证 运行 除非异常未处理,正如 this documentation 确认的那样。

对于控制台应用程序,很简单,未处理的异常会终止进程。然而,在 ASP.net 中,我的理解变得模糊了。 ASP.net 中的未处理异常不会终止进程,甚至不会回收应用程序池,实际上会执行框架代码,以便通过网络发回错误详细信息。但是,此类错误仍通常称为 unhandled exceptions.

就 .net 运行time 而言,ASP.net 中的 "unhandled exception" 是否已实际处理,因此我可以相信 finally 块将始终执行?

注意:我知道 WhosebugException 等一些异常总是会导致应用程序池崩溃,因此可能不会执行 finally 块,我不关心那些边缘情况。

由于 asp.net 框架在堆栈上进一步处理了异常,因此将执行 finally 块。仅因为您的代码不处理异常并不意味着它未处理。