定时器(System.Threading)线程安全

时间:2010-06-16 14:16:16

标签: c# multithreading timer

有没有人知道这段代码是否是线程安全的,或者在调用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);
}

2 个答案:

答案 0 :(得分:5)

它是“线程安全的”,因为对Change的调用实际上不会破坏计时器。

但是,从某种意义上来说,它绝对不是“线程安全的”,因为你肯定有竞争条件(当你在timerCallback2时,不可能确保DoStuff没有运行。

答案 1 :(得分:2)

根据MSDN文档,Timer类型是线程安全的,因此唯一需要注意的地方是调用DoStuff();.的地方