重複の可能性:
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#が例外機能を派生させる)では、例外はスタックの2パス検索で処理されると規定されています。[13] 最初のパスは、一致するcatchブロックを見つけようとし、何も見つからない場合はプログラムを終了します。一致するcatchブロックが見つかった場合にのみ、2番目のパスが実行され、間にあるfinallyブロックが実行されます。これにより、finallyブロックによってプログラムの状態が最初に変更されることなく、問題を診断できます。また、プログラムが不明な状態にあるときに、最終的にブロックが望ましくない副作用(外部データの破損やさらなる例外のスローなど)を引き起こす可能性があるリスクも排除します。
しかし、最終的に実行するためにキャッチは必要ありません。
static void Main()
{
try { throw new Exception(); }
finally
{
Console.WriteLine("1");
}
}