不调用Thread.Join()的后果

时间:2011-06-15 20:21:57

标签: c# .net

如果我在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()

}

编写此代码会产生什么后果吗?

3 个答案:

答案 0 :(得分:6)

是的,它是安全的,因为线程将一直持续到完成为止,你不需要引用Thread对象来保持它活着,线程的行为也不会改变方式。

你唯一放弃的是后来加入线程或检查其状态的能力,但绝对安全地触发并忘记线程

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

答案 1 :(得分:4)

是的,你绝对可以点击并忘记一个帖子,而不会调用Join。不会有任何错误的后果。如果它是一个后台线程,并且该进程在线程执行完毕之前终止,那么无论如何都会将其关闭。

答案 2 :(得分:4)

取决于。

background thread会接受死亡并且不会让这个过程保持活力。不加入意味着......好吧,可能早死。就“火与忘记”语义而言,这与前景线程略有不同。

快乐的编码。