如何终止产生另一个正在睡眠的线程的线程?

时间:2010-06-13 19:32:21

标签: c# multithreading

我有一个由Thread.Start()制作的长线程。它使用QueueUserWorkItem生成一个后台线程,它在大多数时间都会休眠。

然后类所有者被处理我调用thread1.Join()但自然它不会返回,因为它的子后台线程正在休眠。

优雅地终止具有其他线程并且没有什么麻烦的线程的正确解决方案是什么?


在我写完这个问题之后,我突然意识到当我做这个部分时,我可能有一个精神障碍。

首先,线程不想因为后台线程而终止。但另一个原因。

第二 - 我不得不使用计时器,因为我无缘无故地持有一个线程 - 只等待每天发生一次的事件!

这对我来说非常愚蠢:)抱歉。

3 个答案:

答案 0 :(得分:1)

将线程池线程用于短期线程通常很好。 如果你需要一个将运行很长时间的后台线程,请使用一个新的Thread实例并将其Background属性设置为true。

答案 1 :(得分:0)

如果你使用.Abort,它将在适用的线程上引起ThreadAbortException - 尽可能优雅地响应它。您也可以使用Begin / EndCriticalRegion。

答案 2 :(得分:0)

我不确定它是否是正确的解决方案,但我通常会让后台线程只在很短的时间内休眠,然后醒来检查状态,然后退出,做一些工作或再次进入睡眠状态。如果你正在寻找绝对的性能,可能不是很好,但至少对于大多数非服务器应用程序,我认为它会没问题。

相关问题