タイマーを使用するクラスがあります。このクラスはを実装し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
。私にとっては、コードが不必要に複雑になるようです...
私はマルチスレッドの専門家ではないので、アドバイスをいただければ幸いです。