【发布时间】:2011-11-02 14:48:57
【问题描述】:
鉴于以下...
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 的局部变量声明空间中。在线程完成之前,这将是足够的参考来保留它们。这是正确的吗?
【问题讨论】:
-
需要保留吗?入队的方法是静态的,因此不隐式需要对
MyWorkerClass实例的任何引用。 -
旁注:在线程池中排队长时间运行的作业通常不是一个好主意,因为它会强制池产生额外的线程。
标签: c# .net multithreading garbage-collection threadpool