【发布时间】:2011-04-11 13:54:18
【问题描述】:
假设我有如下代码:
int Main()
{
if (true)
{
new Thread(()=>
{
doSomeLengthyOperation();
}).Start();
}
while (true)
{
//do nothing
}
}
有 2 个线程,我将调用 Main 线程,即执行 Main() 函数的线程,并将在“if”测试中新建的线程称为线程 A。
我的问题是,线程 A 什么时候被销毁? doSomeLenghtyOperation() 能否完成?
由于没有指向线程A的引用,是否将其标记为垃圾回收的候选对象:
- “new Thread().Start()”语句本身完成后立即?
- 在“if(true)”范围退出后立即?
- doSomeLengthOperation() 运行完成后?
- 从不?
我看到的所有例子都是 Main() 持有引用,然后主线程在退出之前等待加入线程 A。我很好奇上面代码的生命周期是什么。
提前致谢!
【问题讨论】:
-
顺便说一句,
if (true)在这里绝对没有必要。您可以只使用大括号来创建范围。 -
是的,我知道。但是描述“未命名的范围”有点困难,所以我决定使用 if (true) 来让事情更清楚。
标签: c# multithreading object-lifetime