我想制作一段可重用的代码,线程可以调用它来休眠,直到达到特定时间或被告知取消。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 关键字的情况下可以安全使用的方法呢?还是有不同的和完全更好的方法?