私たちは、第三者システムを初期化するために使用されるスレッドが、それを終了させるのに使用されるスレッドと同じでなければならない非常に扱いにくいinteropの問題を抱えています。これを行わないと、デッドロックが発生します。 IISでホストされているWCFサービスからinteropを実行しています。現在、このクリーンアップは処分で行われ、通常は非常にうまく機能します。残念ながら、重い負荷の下でIISは無礼なアンロードを行い、決して処理を呼び出すことはありません。シャットダウンロジックをクリティカルファイナライザに移行することはできますが、初期化スレッドにアクセスできなくなるため、これは役に立ちません。現時点では、AppDomainが壊れた状態にある可能性が高いことをCLRに通知しているようです。しかし、私はそれを(またはそれが可能であっても)行う方法がわかりません。これがクラスレベルでの契約の有用性であるかもしれないが、私はそれらを完全に理解していないことは認めている。CERを使用して、finalizeが呼び出されないことを保証できますか?
EDIT:これは、ファイナライザのスレッドアフィニティの問題と見なすこともできます。だれでも賢明な解決策があれば、私はすべて耳を傾けています:)
扱っているコンポーネントがネイティブであるか、管理されていますか? – JaredPar
ネイティブ。独自のメモリ管理などを備えたシステムへのC APIです。 – Jeff