我有一个像这样的
初始化的ThreadClassThreadClass t = new ThreadClass();
Thread thread = new Thread(new ThreadStart(t.Run));
thread.Start();
我的ThreadClass有一个析构函数:
~ThreadClass(){ // some stuff }
这个析构函数被“错误地”调用。这意味着该线程仍在运行且工作正常。但是析构函数以不可预测的方式被调用。它不是真正可重复的,但是如果我设置了一个断点并长时间运行我的代码,那么析构函数就会被调用。是否有垃圾收集清理我的ThreadClass。但如果是这样,为什么我的线程继续运行?
答案 0 :(得分:1)
GC会在最后一次引用超出范围后的某个时间收集一个对象。
如果您的Run()
方法未使用this
,则可以随时收集您的实例。
GC.KeepAlive()
可以改变这种行为;仔细阅读其文档 。
这就是为什么你不应该使用终结器来清除原生资源以外的任何东西。