有没有人知道这段代码是否是线程安全的,或者在调用timer2.Change时是否必须使用lock?
Timer timer1 = new Timer(timerCallback1);
Timer timer2 = new Timer(timerCallback2);
timer1.Change(5000, 5000);
timer2.Change(3000, 3000);
public void timerCallback1(object state)
{
timer1.Change(Timeout.Infinite, Timeout.Infinite);
timer2.Change(Timeout.Infinite, Timeout.Infinite);
DoStuff();
timer1.Change(5000, 5000);
timer2.Change(3000, 3000);
}
答案 0 :(得分:5)
它是“线程安全的”,因为对Change
的调用实际上不会破坏计时器。
但是,从某种意义上来说,它绝对不是“线程安全的”,因为你肯定有竞争条件(当你在timerCallback2
时,不可能确保DoStuff
没有运行。
答案 1 :(得分:2)
根据MSDN文档,Timer类型是线程安全的,因此唯一需要注意的地方是调用DoStuff();.
的地方