次のコード スニペットがあるとします。
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
最終的にブロックが実行されます。
この状況を説明する c# 仕様のドキュメントは見つかりませんでした。また、私はこれを見つけましたMSDN
:
ハンドルされないエラーの後の finally ブロックの実行は、例外アンワインド操作がどのようにトリガーされるかによって異なります。
しかし、説明はありません。なぜこれが起こっているのか誰でも説明できますか?
更新 1 : .Net Framework 4.5.1 および 4.5.2 でテストしました。