少なくとも管理対象アプリの終了を延期し (数十ミリ秒)、共有フラグを設定して他のスレッドに正常に終了する機会を与える方法はありますか (SO スレッド自体は明らかにそれ以上何も実行しません)。これに JIT デバッガーまたは CLR ホスティングを使用することを考えています。
なぜ私は何か間違ったことをしたいのですか?:
あまり詳しく説明しなくても、この類推を想像してみてください。あなたはカジノでルーレットに賭けていて、突然ルーレットが信頼できない偽物であることがわかりました。したがって、すぐにカジノを離れたいと思うかもしれませんが、最初にテーブルからベットを回収したいと思うでしょう。残念ながら、非常に厳しいパフォーマンス要件があるため、これに別のプロセスを利用することはできません。
試してみましたがうまくいきませんでした:
StackOverflowException (および MSDN の矛盾する情報) に対する .NET の動作については、SO で何度か議論されています。
HandleProcessCorruptedStateExceptionsAttribute (たとえば、appdomain の未処理の例外ハンドラー) が機能しない
ExecuteCodeWithGuaranteedCleanupが機能しない
legacyUnhandledExceptionPolicyが機能しない
StackOverflowExceptions を処理する他の試みはほとんどないかもしれませんが、Hans Passant によるこの素晴らしい回答で言及されているように、CLR がプロセス全体を終了させることは明らかです。
試してみることを検討してください:
- JIT デバッガー - 例外を凍結した状態でスレッドを残し、いくつかの共有フラグを設定し (ピン留めされた場所にある可能性が高い)、短時間他のスレッドを解凍します。
- CLR のホスティングと未処理の例外ポリシーの設定
他に何か考えはありますか?または、これら 2 つの方法での経験 (成功/失敗) はありますか?