鉴于以下内容......
public MyClass
{
public void MyClass()
{
var myWorkerClass = new MyWorkerClass();
myWorkerClass.DoSomething();
// and exit quickly
}
}
public MyWorkerClass()
{
public void DoSomething()
{
ThreadPool.QueueUserWorkItem(() =>
{
SomeLongRunningProcess();
});
}
public static void SomeLongRunningProcess()
{
// Something that takes a long time
}
}
MyWorkerClass和MyClass什么时候有资格进行垃圾回收?
我的想法是MyWorkClass中的匿名函数.DoSomething()将存储在MyWorkerClass的局部变量声明空间中。这将足以引用它们,直到线程完成。这是对的吗?
答案 0 :(得分:2)
MyClass应该有资格立即收集。 SomeLongRunningProcess()完成后,MyWorkerClass将有资格进行收集(假设前面提到的方法引用'this',在您的示例中不是这样)。
正如您的代码现在所示,这两个实例都立即符合条件。
如果你想让MyClass或MyWorkerClass闲逛,可以从SomeLongRunningProcess或调用它的闭包中引用它。