不调用Thread.Join()的后果

kin*_*ohm 5 .net c#

如果我在C#中启动一个新线程,我可以解雇并忘记,而不必担心线程被加入吗?

void DoSomething()
{
  var worker = new Worker();
  var start = new ThreadStart(worker.DoStuff);
  var thread = new Thread(start);
  thread.Start();

  // do something else...
  // who knows how long it'll take...

  // exit without calling thread.Join()

}
Run Code Online (Sandbox Code Playgroud)

编写此代码会有后果吗?

ang*_*son 6

是的,它是安全的,因为线程将继续直到完成它自己,你不需要引用Thread对象来保持它活着,线程的行为也不会以任何方式改变.

你唯一放弃的是能够在以后加入线程,或检查它的状态,但是激活和忘记线程绝对安全的.

但是,如果您触发并忘记将线程设置为后台线程,则在线程完成之前程序退出时,该线程可能无法运行完成.