SafeHandle的文档说:
SafeHandle 类包含一个终结器,可确保句柄关闭并保证运行,即使在主机可能不信任 AppDomain 状态的一致性时意外 AppDomain 卸载期间也是如此。
我不确定“AppDomain”是什么意思,但我认为它应该始终运行,不是吗?
那么为什么这段代码:
class Program
{
static void Main(string[] args)
{
var c1 = new C();
var c2 = new C();
}
}
class C: SafeHandleZeroOrMinusOneIsInvalid
{
public C() : base(true) {
handle = (IntPtr)1;
}
override protected bool ReleaseHandle() {
Console.WriteLine("Finalizing");
throw new Exception();
}
}
吐出:
Finalizing
Unhandled Exception: System.Exception: Exception of type 'System.Exception' was
thrown.
at FinalizeErrorTest.C.ReleaseHandle()
at System.Runtime.InteropServices.SafeHandle.InternalFinalize()
at System.Runtime.InteropServices.SafeHandle.Dispose(Boolean disposing)
at System.Runtime.InteropServices.SafeHandle.Finalize()
“Finalizing”只显示一次?
c2
如果我将异常移到构造的位置下方,或者根本没有?