Finalizeが呼ばれていないことを保証するためにCersを使用することができますか?
-
12-12-2019 - |
質問
私たちは、3RD-Partyシステムを初期化するために使用されるスレッドがそれを終了するために使用されるスレッドでなければならない、非常にトリッキーな相互作用の問題を抱えています。これを実行しなかった結果はデッドロックになります。 IISでホストされているWCFサービスから相互opを実行しています。現在この清掃は処分で行われ、通常はうまく機能します。残念ながら、重い負荷の下でIISは失礼なアンロードをし、私たちは処分を呼び出すことは決してありません。シャットダウンロジックをクリティカルファイナライザに移動できますが、初期化スレッドへのアクセスがなくなったため、役に立ちません。この時点で、私たちの唯一の頼みは、AppDomainが現在壊れた状態で今やCLRに通知しているようです。ただし、それをする方法はわかりません(またはそれが可能な場合は可能)。これがクラスレベルでの契約の有用性であるということかもしれませんが、私はそれらを完全に理解していない私は認めていません。
編集:あるいは、これはファイナライザのスレッドアフィニティ問題として表示される可能性があります。誰かがそれに賢い解決策を持っているなら、私はすべての耳にあります:)
解決
可能であれば、そのネイティブの依存関係に依存するコードをスタンドアロンWindowsサービスアプリケーションに分割してみてください。WCF / IISでうまく機能できない場合は、それと戦うのではなく競合を避けるべきです。
所属していません StackOverflow