这是一篇来自 MSDN 文章的节选。可以在这里找到完整文章。
有一个专门的运行时线程用于调用 Finalize 方法。当 freachable 队列为空时(通常情况下),该线程会休眠。但是当条目出现时,该线程会唤醒,从队列中删除每个条目,并调用每个对象的 Finalize 方法。因此,在 Finalize 方法中不应执行任何对执行代码的线程做出任何假设的代码。例如,在 Finalize 方法中避免访问线程本地存储。
我以前问过这个问题,并因为同样的原因被投票否决说没有专门的线程用于可终结对象,我的信息来源是错误的。如果这篇文章所解释的是真的,那么我想知道 CLR 为什么需要一个专门的线程来调用 Finalize 方法?
有一个专门的运行时线程用于调用 Finalize 方法。当 freachable 队列为空时(通常情况下),该线程会休眠。但是当条目出现时,该线程会唤醒,从队列中删除每个条目,并调用每个对象的 Finalize 方法。因此,在 Finalize 方法中不应执行任何对执行代码的线程做出任何假设的代码。例如,在 Finalize 方法中避免访问线程本地存储。
我以前问过这个问题,并因为同样的原因被投票否决说没有专门的线程用于可终结对象,我的信息来源是错误的。如果这篇文章所解释的是真的,那么我想知道 CLR 为什么需要一个专门的线程来调用 Finalize 方法?