AppDomain是一个包装糟糕的第三方库的好方法吗?

时间:2011-11-08 21:41:16

标签: .net appdomain

我正在使用第三方库来维护与远程服务器的TCP连接并管理通信协议。有时它失去了连接,所以我有一个监视连接状态并尝试重新连接的线程。通常它可以重新连接。

问题是有时调用Connect()永远不会返回。我重新启动它将工作的过程,所以我认为库中发生了一些愚蠢的事情,死锁或一些静态变量被置于一种奇怪的状态。我反编译代码,但它有点太“有创意”,无法理解。

我需要以某种方式编写此代码,以便我不必因第三方库而重新启动该过程。该库本身有2个Action{T}的回调。在自己的应用程序域中运行库是一个不错的选择吗?这样,如果连接断开并且不会重新启动,我可以杀死appdomain并开始一个新的。我应该考虑哪些因素?

2 个答案:

答案 0 :(得分:2)

挂线非常有问题。它们总是挂在某种本地调用上,一种是Thread.Abort()无法访问的。当线程无法中止时,尝试卸载AppDomain将无法正常工作。

在单独的流程中运行代码是更好的解决方案,您始终可以使用Process.Kill()来完成流程。和WCF这样的东西谈谈。

答案 1 :(得分:0)

嗯,显然你需要检查这是否真的解决了这个问题。如果确实如此,这是一个体面的工作。如果第三方库全部受到管理,我相信您的解决方法将有效。

我认为您无法编程以帮助解决此问题。您可以联系图书馆的开发人员,或者在其他地方寻找类似的图书馆,如果可能的话。当你有一个可行的解决方法时,最好做所有这些事情。