C#/ mono挂在AppDomain.Unload

时间:2015-09-28 06:59:31

标签: c# mono appdomain

我们的应用运行多个不同的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);
    }
}

0 个答案:

没有答案