c# - 能否使用 CER 来保证永远不会调用 finalize?

标签 c# multithreading iis interop cer

我们有一个非常棘手的互操作问题,其中用于初始化第 3 方系统的线程必须与用于终止它的线程相同。不这样做会导致死锁。我们正在从 IIS 中托管的 WCF 服务执行互操作。目前,这种清理是在处置中完成的,通常效果很好。不幸的是,在重负载下,IIS 会进行粗鲁的卸载,我们永远无法调用 dispose。我们可以将关闭逻辑移到关键终结器中,但这无济于事,因为我们无法再访问初始化线程!此时我们唯一的办法似乎是通知 CLR AppDomain 现在可能处于损坏状态。但是,我不确定该怎么做(或者是否可能)。这可能是类级别契约(Contract)的效用,但我承认我并不真正完全理解这些。

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

最佳答案

如果可能,请尝试将依赖于该 native 依赖项的代码拆分为独立的 Windows 服务应用程序。如果它不能很好地与 WCF/IIS 一起工作,你应该避免冲突而不是对抗它。

关于c# - 能否使用 CER 来保证永远不会调用 finalize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674465/

相关文章:

python - 了解 Python 中的异步/多处理

.net - 在 IIS 服务器上使用 IndependentStorage

iis - 使用 powershell 在 IIS 中创建站点

c# - 在 gridview 中的 asp.net 按钮中传递多个参数

c# - 访问 SQL CE 数据库的线程安全方式

c# - 向WPF Prism MVVM应用程序添加后台线程

objective-c - 从不同的线程访问属性

c# - GUI 在 Dispatcher.BeginInvoke 或 Task.StartNew 时卡住

azure - 发布完成后 IIS 物理路径发生变化 Azure DevOps

c# - 使用 linq to sql 不循环更新数据库中的多条记录,可能吗?