不间断的部分

时间:2009-11-02 09:31:36

标签: c# multithreading

我有一个执行以下操作的主题:

1)做一些工作 2)等待
3)做更多工作 4)等待
......

我希望(能够)在其中一个睡眠部分中断线程但不在工作部分中断。问题是工作部分可能包含一个较小的睡眠部分,然后可能会捕获一个中断。所以我需要的是一些防止某一部分中断的方法,我该怎么做呢?

4 个答案:

答案 0 :(得分:1)

您需要的只是在“等待部分”中等待具有超时期限的单个等待句柄。超时时间超过将意味着“继续”。

答案 1 :(得分:0)

一般情况下,您无法控制何时安排线程,但是Thread.Sleep会强制进行上下文切换并听起来像您所说的那样:

http://msdn.microsoft.com/en-us/library/d00bd51t.aspx

答案 2 :(得分:0)

让线程“中断”自己。

我能想到的最简单的例子是BackgroundWorker和CancellationPending属性的使用。 MSDN上对此进行了介绍,特别是与BackgroundWorker相关的概念,可以在其他地方轻松使用。

如果需要更大的“防止中断”定义,则需要使用额外的“锁”(各种类型,或重新考虑设计)。特别是,除了少数例外,我坚信线程应该具有强大的数据隔离,并且可变对象应该至少由一个线程拥有

答案 3 :(得分:-1)

尝试使用某个对象来同步线程中断。

Object syncRoot;

在你的线程中,对工作部分使用lock语句:

lock (syncRoot)
{
    // Do someting here
}

当您需要中断线程时,也请在lock语句中执行此操作:

lock (syncRoot)
{
    // Interrupt your thred here
}