我有一个执行以下操作的主题:
1)做一些工作
2)等待
3)做更多工作
4)等待
......
我希望(能够)在其中一个睡眠部分中断线程但不在工作部分中断。问题是工作部分可能包含一个较小的睡眠部分,然后可能会捕获一个中断。所以我需要的是一些防止某一部分中断的方法,我该怎么做呢?
答案 0 :(得分:1)
您需要的只是在“等待部分”中等待具有超时期限的单个等待句柄。超时时间超过将意味着“继续”。
答案 1 :(得分:0)
一般情况下,您无法控制何时安排线程,但是Thread.Sleep
会强制进行上下文切换并听起来像您所说的那样:
答案 2 :(得分:0)
让线程“中断”自己。
我能想到的最简单的例子是BackgroundWorker和CancellationPending属性的使用。 MSDN上对此进行了介绍,特别是与BackgroundWorker相关的概念,可以在其他地方轻松使用。
如果需要更大的“防止中断”定义,则需要使用额外的“锁”(各种类型,或重新考虑设计)。特别是,除了少数例外,我坚信线程应该具有强大的数据隔离,并且可变对象应该至少由一个线程拥有。
答案 3 :(得分:-1)
尝试使用某个对象来同步线程中断。
Object syncRoot;
在你的线程中,对工作部分使用lock语句:
lock (syncRoot)
{
// Do someting here
}
当您需要中断线程时,也请在lock语句中执行此操作:
lock (syncRoot)
{
// Interrupt your thred here
}