将线程设置为背景或不

时间:2011-01-02 14:07:07

标签: c# asp.net multithreading

我需要解释一下我在这个网站上得到的一些建议。我正在做一个发送应用程序的时事通讯,我的邮件是在一个单独的帖子中发送的,因此这个过程不会减慢整个网站的速度。 有几个人建议我将线程IsBackground属性设置为true。 我做到了这一点,但也对此做了很多,所以我用谷歌搜索了一下。 事实证明,将IsBackground属性设置为true表示“如果在此线程仍在运行时进程关闭,则可以。”。 或者,当微软把它“任何剩余的后台线程停止并且没有完成。”

我不知道我是否采用了错误的方法但是,将IsBackground属性保留为false会不会更好,以便生成的线程可以完成有关主线程的工作?

2 个答案:

答案 0 :(得分:7)

如果你设置“IsBackground = true”,你将线程标记为不重要 - 所以如果你希望你的后台工作完成,即使网站发生故障,我认为你的直觉是正确的,把它留作“IsBackground =假”。

这不是万无一失的;生成的线程仍然是主线程的子线程,因此根据站点的关闭方式,它仍然可以降低整个过程。如果您确实希望确保您的工作能够完成,无论网站本身发生什么,您都应该考虑将其提取到自己的流程中,例如WCF服务。

答案 1 :(得分:0)

听起来这个帖子有类似的东西:

while(true)
{
  //do something
}

如果在该过程试图停止时该线程不会中止,则该过程将保持不变(除非您强行杀死​​它)。
另一方面,当进程的所有前台线程都关闭时,后台线程将自动中止。