如何制作线程的实用方法

时间:2012-11-07 12:12:49

标签: c# thread-safety volatile

我想制作一个可重复使用的代码,Threads可以调用它直到达到一定时间或者被告知要取消。 Cancel变量将是具有Thread的对象的volatile布尔值。

我的方法是:

public class ThreadUtil
{
    public static void SleepTillOrDone(DateTime till, ref bool done)
    {
        while ((!done) && (DateTime.Now < till))
        {
            var diff = till - DateTime.Now;
            Thread.Sleep(diff.TotalMilliseconds >= 100 ? 100 : 10);
        }
    }
}

但是,这会发出警告:“对volatile字段的引用不会被视为volatile。”在阅读了一下后,我明白了警告意味着什么,但是如何编写一个没有volatile关键字可以安全使用的方法?或者有不同的&amp;完全更好的方法?

1 个答案:

答案 0 :(得分:2)

在我看来,你正试图重新发明现有的原语。在这种情况下,WaitHandles。您的方法看起来很像ManualResetEvent.WaitOne,意图超时。