returnfinally ブロックではステートメントを使用できないため、どちらの例もコンパイルされません。これは、最初の状況はあり得ないことを意味し、実際に対処する必要はありません。
設計上、内でリターンしてtryもfinallyブロックが実行されます。
2 番目の状況については、一般に、はい -finallyブロックが実行されます。ただし、を呼び出すEnvironment.FailFastと、このメソッドは具体的に次のようになります。
アクティブな try/finally ブロックまたはファイナライザーを実行せずにプロセスを終了します。
その場合、finally ブロックは発生しません。Environment.Exit(またはタイプ呼び出し)など、プロセスを「終了」する他のメソッドは、Application.Shutdown通常、ブロック内のコードを実行することに注意してください。finally
編集すると、最初のfinallyブロックが実行されます。
最初のケースでは、returnはブロックの実行 tryをトリガーします。finally
2 番目はEnvironment.Exitすぐにプロセスを終了し、finally は実行されません。のドキュメントで指定されているように、状況 2 の catch ブロックも実行されないことに注意してください。Environment.Exit
Exit が try または finally ブロックから呼び出された場合、catch ブロック内のコードは実行されません。return ステートメントを使用すると、catch ブロック内のコードが実行されます。
あなたの最後の行については:
私の理解では、exit はシステム コールで、return は関数呼び出しです。
これは真実ではありません。 return関数呼び出しではなく、制御フロー用 の言語指定のジャンプ ステートメントです。Environment.Exit実際にはメソッド呼び出し (クラスExit内のメソッド) です。Environment