我想制作一个可重复使用的代码,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;完全更好的方法?