可以使用CER来保证永远不会调用finalize吗?

时间:2012-03-12 20:38:05

标签: c# multithreading iis interop cer

我们有一个非常棘手的互操作问题,其中用于初始化第三方系统的线程必须是用于终止它的相同线程。不这样做会导致死锁。我们正在IIS中托管的WCF服务执行互操作。目前,这种清理工作已经完成,通常效果很好。不幸的是,在负载很重的情况下,IIS会做一个粗鲁的卸载,我们永远不会打电话处理。我们可以将关闭逻辑移动到关键终结器中,但这没有用,因为我们不再能够访问初始化线程!在这一点上,我们唯一的办法似乎是通知CLR AppDomain现在可能处于损坏状态。但是,我不知道该怎么做(或者甚至可能)。可能这是合同在阶级的效用,但我承认我并不完全理解这些合同。

编辑:或者,这可以被视为终结器中的线程亲和性问题。如果有人有一个聪明的解决方案,我会全力以赴:)

1 个答案:

答案 0 :(得分:1)

尝试将依赖于本机依赖关系的代码拆分为独立的Windows服务应用程序(如果可能)。如果它无法与WCF / IIS一起使用,则应避免冲突而不是与之作斗争。