Does anyone know if this code would be thread safe, or do I have to use lock when calling timer2.Change?
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);
}
It's "thread-safe" in the sense that the call to
Change
won't actually corrupt the timer.However, it's not "thread-safe" in the sense that you definitely have a race condition (it's not possible to ensure that
timerCallback2
isn't running when you're inDoStuff
).Per MSDN documentation the Timer type is thread safe, so the only place you have to be careful is where you call
DoStuff();.