问题描述
析构函数的怪异的。我试图消除通过使用智能参考文献管理,确保垃圾收集器能够在正确的时间收集对象使用一次性模式的需要。在我的析构函数中的一个,我不得不等待另一个对象,我发现它没有一个事件。该应用程序干脆关机和析构函数在执行中间终止。
我期望析构函数总是被允许完成运行,但下面的测试表明,事实并非如此。
使用系统;使用System.Diagnostics程序
;
使用的System.Threading;
命名空间DestructorTest
{
类节目
{
静态无效的主要(字串[] args)
{
新DestructorTest();
新LoopDestructorTest();
使用(新DisposableTest()){}
}
}
类DestructorTest
{
〜DestructorTest()
{
//这是不允许的完成。
Thread.sleep代码(10000);
}
}
类LoopDestructorTest
{
〜LoopDestructorTest()
{
INT CUR = 0;
的for(int i = 0; I< int.MaxValue ++ I)
{
CUR = I;
}
//这是不允许的完成。
的Debug.WriteLine(现);
}
}
类DisposableTest:IDisposable的
{
公共无效的Dispose()
{
//这当然被允许完成。
Thread.sleep代码(10000);
}
}
}
因此, AREN 'T析构函数保证完成运行?
No. From what I remember, when the process terminates it gives finalizers a couple of seconds to execute, but then terminates the process abruptly. You wouldn't want a bad finalizer to prevent a process from ever finishing, would you?
You should regard finalization as a "best effort" clean-up - in particular, it's not going to happen in situations where the whole system is abruptly shut down, such as BSOD or power outage.
EDIT: I've found some pseudo-documentation in the form of a blog post from Joe Duffy:
这篇关于不保证析构函数完成运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!