我们的应用运行多个不同的AppDomain,以解决我们正在使用的第三方API的限制。
当我们尝试使用AppDomain.Unload(appDomain)
卸载AppDomain时,间歇性地(比如8次),整个应用程序挂起时没有任何警告,并且没有响应SIGQUIT,因此很难调试问题。 / p>
我们的代码库中没有非托管代码,但我们使用的其中一个库(包括Npgsql)可能包含一些代码。
谷歌搜索该问题显示了许多对AppDomain.Unload挂起的引用,但这些已经在我们正在使用的Mono版本中被修复(4.03)。
在Ubuntu 12.04上运行。
非常感谢任何帮助/指示!
以下代码的简化版本:
AppDomain appDomain = null;
try {
appDomain = AppDomain.CreateDomain("some unique name");
batchProcessor = (MarshaledProcessor)appDomain.CreateInstanceAndUnwrap(
MarshalledProcessorType.Assembly.FullName,
MarshalledProcessorType.FullName);
batchProcessor.ProcessItems();
} catch (Exception exception) {
Log.Error("some error", exception);
} finally {
try {
if (batchProcessor != null) {
batchProcessor.Dispose();
}
if (appDomain != null) {
AppDomain.Unload(appDomain);
}
} catch (Exception exception) {
Log.Error(exception);
}
}