本文介绍了不保证析构函数完成运行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

析构函数的怪异的。我试图消除通过使用智能参考文献管理,确保垃圾收集器能够在正确的时间收集对象使用一次性模式的需要。在我的析构函数中的一个,我不得不等待另一个对象,我发现它没有一个事件。该应用程序干脆关机和析构函数在执行中间终止。
我期望析构函数总是被允许完成运行,但下面的测试表明,事实并非如此。

 使用系统;使用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:

这篇关于不保证析构函数完成运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 23:26