未处理的异常和werfault

Ara*_*yan 6 c# exception-handling windows-error-reporting

考虑一下我们有这段代码:

static void Main(string[] args)
{
    try
    {
        throw new Exception("Exception");
    }
    catch
    {
        throw;
    }
    finally
    {
        Console.WriteLine("------finally-----");
    }
}
Run Code Online (Sandbox Code Playgroud)

我们有未处理的异常和finally阻止.

werfault启用后,当我Cancel尝试"自动解决问题"时按下,最后执行块.

但是,如果我没有按下Cancel并在下一个窗口中单击Close The Program finally块不执行.

最后当我禁用werfault并点击Close Program finally块执行时.

我没有在c#规范中找到描述这种情况的任何文档.我也发现了这个MSDN:

在未处理的错误之后执行finally块取决于如何触发异常展开操作.

但没有解释,任何人都可以描述为什么会这样?

更新1:我已在.Net Framework 4.5.1和4.5.2中测试过它.

Sal*_*ari 1

WerFault.exe 由于未处理的异常而立即终止并终止 .NET进程WerFault,但是当您禁用Microsoft .NET 错误报告时,会以某种方式关闭应用程序,以便该finally块仍会执行并且不会终止进程

WerFault.exe检查是否立即终止进程的最佳方法是Event Viewer( Description: The process was terminated due to an unhandled exception.)。

Application: ConsoleApplication3.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Exception
Stack:
   at ConsoleApplication3.Program.Main(System.String[])
Run Code Online (Sandbox Code Playgroud)