我们有一个非常棘手的互操作问题,其中用于初始化第 3 方系统的线程必须与用于终止它的线程相同。不这样做会导致死锁。我们正在从 IIS 中托管的 WCF 服务执行互操作。目前,这种清理是在处置中完成的,通常效果很好。不幸的是,在重负载下,IIS 会进行粗鲁的卸载,我们永远无法调用 dispose。我们可以将关闭逻辑移到关键终结器中,但这无济于事,因为我们无法再访问初始化线程!此时我们唯一的办法似乎是通知 CLR AppDomain 现在可能处于损坏状态。但是,我不确定该怎么做(或者是否可能)。这可能是类级别契约(Contract)的效用,但我承认我并不真正完全理解这些。
编辑:或者,这可以被视为终结器中的线程亲和性问题。如果有人对此有一个聪明的解决方案,我会洗耳恭听:)
最佳答案
如果可能,请尝试将依赖于该 native 依赖项的代码拆分为独立的 Windows 服务应用程序。如果它不能很好地与 WCF/IIS 一起工作,你应该避免冲突而不是对抗它。
关于c# - 能否使用 CER 来保证永远不会调用 finalize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674465/