卸载AppDomains

Ant*_*ton 6 .net appdomain

我有AppDomainA,它会旋转AppDomainB.AppDomainB然后旋转AppDomainC.

如果,内AppDomainA我卸载AppDomainB,并AppDomainC也得到卸载或我必须确保来处理我自己?

vcs*_*nes 1

找出答案的最好方法就是尝试一下。下面是创建AppDomainA的示例,它创建了AppDomainB。我们告诉 B 做一些工作,然后卸载 A。

internal class Program
{
    private static Timer _timer;
    private static void Main(string[] args)
    {
        var domainA = AppDomain.CreateDomain("AppDomainA");
        domainA.DomainUnload += (s, e) => Console.WriteLine("DomainA was unloaded.");
        domainA.DoCallBack(() =>
        {
            var domainB = AppDomain.CreateDomain("AppDomainB");
            domainB.DomainUnload += (s, e) => Console.WriteLine("DomainB was unloaded.");
            domainB.DoCallBack(() =>
            {
                _timer = new Timer(o =>
                {
                    Console.WriteLine("Tick from AppDomain: " + AppDomain.CurrentDomain.FriendlyName);
                }, null, 0, 1000);
            });
        });
        AppDomain.Unload(domainA);
        Application.Run(); //Run a message loop so AppDomainB can keep doing work.
    }
}
Run Code Online (Sandbox Code Playgroud)

我们看到我们收到消息 AppDomainA 已卸载,但 B 未卸载,并且 B 继续工作。我们的结论是您需要确保自己处理这个问题。