可能的重复:
finally 不在 .net try..finally 块中执行的条件
在 C# 中,如果抛出未处理的异常,finally 块是否会在 try、catch、finally 中执行?
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Finally_Blocks_and_Uncaught_Exceptions指出该finally
块并不总是运行。那是错误的,对吧?
CLI 的 ECMA 标准(C# 从中派生出其异常特性)规定,异常是在堆栈的两遍搜索中处理的。 [13] 第一遍尝试定位匹配的 catch 块,如果没有找到则终止程序。只有找到匹配的 catch 块时,才会执行第二遍,它运行中间的 finally 块。这允许在没有程序状态首先被 finally 块修改的情况下诊断问题;它还消除了 finally 块在程序处于未知状态时可能产生不良副作用的风险(例如外部数据损坏或引发更多异常)。
但是,我不需要 catch 来最终执行:
static void Main()
{
try { throw new Exception(); }
finally
{
Console.WriteLine("1");
}
}