C# 定时器(系统线程)线程安全

C# 定时器(系统线程)线程安全,c#,multithreading,timer,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(Time

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

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

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


但是,它不是“线程安全的”,因为您肯定有一个争用条件(当您在
DoStuff
中时,无法确保
timerCallback2
没有运行)。

我读到“任何实例成员都不是线程安全的”@亨克:那是在系统中。Timers类,而不是线程。Timer类,它是线程安全的。谢谢,是的,也许我会在DoStuff()之前做一个睡眠,让timerCallback2有时间完成,或者我会添加一个锁。