考虑我们有这段代码:
static void Main(string[] args)
{
try
{
throw new Exception("Exception");
}
catch
{
throw;
}
finally
{
Console.WriteLine("------finally-----");
}
}
我们有未处理的异常和finally
阻塞。
何时启用werfault
并且我Cancel
在尝试“自动解决问题”时按下最终块执行。
但是,如果我没有按下Cancel
并且在下一个窗口中单击Close The Program
finally 块不会执行。
最后,当我禁用werfault
并单击Close Program
finally 块执行时。
我在 c# 规范中没有找到任何描述这种情况的文档。我也发现了这个MSDN
:
在未处理的错误之后执行 finally 块取决于异常展开操作的触发方式。
但是没有解释,任何人都可以描述为什么会这样?
更新 1:我已经在 .Net Framework 4.5.1 和 4.5.2 中对其进行了测试。