析构函数在C#中完成任务之前结束了吗?

时间:2015-10-06 11:33:09

标签: c# input destructor

desctructorCheck 类中的以下析构函数代码在几乎2秒之后关闭控制台,然后从用户获取任何输入。

~destructorCheck() {
   Console.WriteLine("Destructor");
   Console.ReadLine( );
}

为何关闭? 析构函数有任何计时器来完成清理过程吗?

2 个答案:

答案 0 :(得分:2)

原因是,由于Destructors的调用方式如下:

引用MSDN:

  

'程序员无法控制何时调用析构函数   因为这是由垃圾收集器决定的。垃圾   收集器检查不再被使用的对象   应用。如果它认为某个对象有资格进行销毁,那么   调用析构函数(如果有的话)并回收用于存储的内存   物体。程序退出时也会调用析构函数。'

我同意阅读Eric Lippert的博客是一件好事!

如果你需要确保在销毁C#对象时发生某些事情,你应该实现IDisposable并将你的闭包逻辑放入Dispose方法。

答案 1 :(得分:2)

是。终结者在终止之前的时间有限。

这是终结者最后工具的众多原因之一。它们不能保证首先运行,并且不能保证完成。它们只是运行,因为框架确实需要该对象离开现在 - 它是GC并且因为它需要内存,或者您的应用程序正在关闭。

我非常确定时间限制是2秒,而且我也不知道有任何改变它的方法。