私の知る限り、try
ブロックfinally
は、いくつかの をスローする可能性のあるコードを実行するために使用されます。また、何らかのタイプの例外を処理する準備ができている場合、および/またはそれらを例外として除外している場合は、ブロックをexception
追加します。しかし、私がこれを実行したとき..catch
FileIOException
AccessRight
private void button1_Click(object sender, EventArgs e)
{
try
{
Environment.FailFast("It failed");
}
finally
{
MessageBox.Show("Done");
}
}
その休憩は例外であり、
FatalExecutionEngineError が検出されました
メッセージ: ランタイムで致命的なエラーが発生しました。エラーのアドレスは、スレッド 0xd04 の 0x032526f4 でした。エラー コードは 0x80131623 です。このエラーは、CLR のバグ、またはユーザー コードの安全でない部分または検証不可能な部分のバグである可能性があります。このバグの一般的な原因には、COM 相互運用機能または PInvoke のユーザー マーシャリング エラーが含まれ、スタックが破損する可能性があります。
今msdnは言う
通常、未処理の例外によってアプリケーションが終了する場合、finally ブロックが実行されるかどうかは重要ではありません。ただし、その状況でも実行する必要があるステートメントが finally ブロックにある場合、1 つの解決策は、try-finally ステートメントに catch ブロックを追加することです。
それで、catch
ブロックを追加しましたが、それでも同じことを言います。
private void button1_Click(object sender, EventArgs e)
{
try
{
Environment.FailFast("It failed");
}
catch (Exception ex)
{
}
finally
{
MessageBox.Show("Done");
}
}
同じエラーで再び失敗しました。最終的にコードブロックが常に実行される(少なくともcatchが追加された場合)と言うCLRに関しては、そうではありません。レビュー/意見はありますか?
また、ここにスナップショットがあります..