这是一些示例代码:
using System;
namespace UnloadFromFinalizer
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
}
AppDomain domain;
Program()
{
this.domain = AppDomain.CreateDomain("MyDomain");
}
~Program()
{
AppDomain.Unload(this.domain);//<-- Exception thrown here
}
}
}
我有一个类,它在构造函数中创建一个 AppDomain 以在对象的生命周期内使用。我想正确清理 AppDomain,所以我想我会在终结器中调用 Unload。不幸的是,这会导致抛出 CannotUnloadAppDomainException。AppDomain.Unload的 MSDN 文档说明:
在某些情况下,调用 Unload 会导致立即的 CannotUnloadAppDomainException,例如在终结器中调用它。
为什么是这样?成员变量“域”是否已清理?该清理是否会自动包括卸载 AppDomain,或者它是否仍会以某种无法访问的方式存在?有什么我应该做的,或者我可以安全地转储终结器吗?(我并不关心 GC 何时删除我的对象,只要它在此过程中被完全清理。)