线程类的构造函数被错误调用

时间:2014-12-22 15:29:16

标签: .net multithreading destructor

我有一个像这样的

初始化的ThreadClass
ThreadClass t = new ThreadClass();
Thread thread = new Thread(new ThreadStart(t.Run));
thread.Start();

我的ThreadClass有一个析构函数:

~ThreadClass(){ // some stuff }

这个析构函数被“错误地”调用。这意味着该线程仍在运行且工作正常。但是析构函数以不可预测的方式被调用。它不是真正可重复的,但是如果我设置了一个断点并长时间运行我的代码,那么析构函数就会被调用。是否有垃圾收集清理我的ThreadClass。但如果是这样,为什么我的线程继续运行?

1 个答案:

答案 0 :(得分:1)

GC会在最后一次引用超出范围后的某个时间收集一个对象。

如果您的Run()方法未使用this,则可以随时收集您的实例。 GC.KeepAlive()可以改变这种行为;仔细阅读其文档

这就是为什么你不应该使用终结器来清除原生资源以外的任何东西。