重複の可能性:
.NET でキャッチできない例外のリスト
文書化されているように、try/catch ブロックは StackOverflowException と OutOfMemoryException を処理できません。
この制限に苦しむ他の例外はありますか?
重複の可能性:
.NET でキャッチできない例外のリスト
文書化されているように、try/catch ブロックは StackOverflowException と OutOfMemoryException を処理できません。
この制限に苦しむ他の例外はありますか?
Jeffrey Richter は、彼の著書 C# による CLR の「Trading Reliability for Productivity」で、このトピックについていくつかの良い点を指摘しています。
ところで、OutOfMemmory をキャッチして処理できます。
うまく説明できない何らかの理由で、.NET Framework のコードを記述する場合、このような細部への注意が払われません。メモリ不足の状況は常に発生する可能性がありますが、OutOfMemoryException から回復するための catch ブロックを含むコードはほとんど見当たりません。実際、一部の開発者から、CLR では OutOfMemoryException をプログラムでキャッチできないと言われたことがあります。記録として、これは絶対に真実ではありません。この例外をキャッチできます。実際、マネージ コードの実行時に発生する可能性のあるエラーは数多くありますが、開発者がこれらの潜在的なエラーから回復しようとするコードを記述することはほとんどありません。
直接キャッチできない唯一の例外は、(スローされたフレームワーク) StackOverflowException です。その時点で例外を処理するためのスペースがスタックにないため、これは論理的に理にかなっています。ドキュメントから:
.NET Framework バージョン 2.0 以降では、StackOverflowException オブジェクトを try-catch ブロックでキャッチできず、対応するプロセスが既定で終了します。
ThreadAbortException はキャッチできますが、常に再発生するため、独自の動作をします。ドキュメントから:
ThreadAbortException は、キャッチできる特別な例外ですが、catch ブロックの最後で自動的に再度発生します。