我有一个使用定时器的类。该类实现IDispose
. 我想在Dispose
方法中等待,直到计时器不会再次触发。
我是这样实现的:
private void TimerElapsed(object state)
{
// do not execute the callback if one callback is still executing
if (Interlocked.Exchange(ref _timerIsExecuting, 1) == 1)
return;
try
{
_callback();
}
finally
{
Interlocked.Exchange(ref _timerIsExecuting, 0);
}
}
public void Dispose()
{
if (Interlocked.Exchange(ref _isDisposing, 1) == 1)
return;
_timer.Dispose();
// wait until the callback is not executing anymore, if it was
while (_timerIsExecuting == 0)
{ }
_callback = null;
}
这个实现正确吗?我认为这主要取决于 _timerIsExecuting == 0
是否是原子操作的问题。还是我必须使用WaitHandle
. 对我来说,这似乎会使代码变得不必要地复杂......
我不是多线程方面的专家,所以对任何建议都会很高兴。