C#线程对象生命周期 - 代码日志

C#线程对象生命周期

假设我有一个代码如下:

int Main()
{
    if (true)
    {
       new Thread(()=>
          {
              doSomeLengthyOperation();
          }).Start();
    }
    while (true)
    {
       //do nothing
    }
}

有2个线程,我将调用Main线程执行Main()函数的线程,并且线程在“if”测试中被新建为Thread A.

我的问题是,线程A何时被破坏?会做一些LenghtyOperation()能够完成吗?

既然没有引用线程A的引用,它将被标记为垃圾收集的候选者:

在“新的Thread()。Start()”语句本身完成之后?
>“if(true)”范围退出后立即?
> doSomeLengthOperation()运行完成后?
>永远不要

我看到的所有示例都是Main()保存引用,然后主线程等待与线程A一起退出。我很好奇上面代码的生命周期。

提前致谢!

线程对象一旦不再使用即可,即可立即收到垃圾回收资料,即调用Start方法后即可。 (当垃圾收集器在特定的时间运行时,不会立即收集。)

然而,实际的线程不是依赖于Thread对象,即使收集了Thread对象,它也将继续运行。

如果主程序退出时线程仍在运行,除非您已经将线程标记为后台线程,否则应用程序将不会结束,直到线程完成为止。

http://stackoverflow.com/questions/3699147/c-sharp-thread-object-lifetime

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C#线程对象生命周期