使用ThreadPool进行垃圾收集
本文关键字:ThreadPool 使用 | 更新日期: 2023-09-27 18:13:20
鉴于以下…
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的局部变量声明空间中。这将是一个足够的参考,以保持他们周围,直到线程完成。这是正确的吗?
MyClass应该符合立即收集的条件。在someelongrunningprocess()完成后,MyWorkerClass将有资格被收集(假设前面提到的方法引用了'this',但在您的示例中没有)。
根据您的代码,这两个实例都立即符合条件。
如果你想让MyClass或MyWorkerClass挂起,从SomeLongRunningProcess或调用它的闭包中引用它。