Я наткнулся на некоторый код, подобный приведенному ниже:
private void SomeCallBack(object state)
{
lock (_lock)
{
try
{
if (_timer == null)
return;
_timer.Dispose();
// do some work here
}
catch
{
// handle exception
}
finally
{
_timer = new Timer(SomeCallBack, state, 100, Timeout.Infinite);
}
}
}
Я не понимаю цели воссоздания таймера каждый раз, когда выполняется обратный вызов. Я думаю, что код пытается достичь того, что только один поток может выполнять работу одновременно. Но разве блокировки не будет достаточно?
Также, согласно MSDN,
Обратите внимание, что обратные вызовы могут возникать после вызова перегрузки метода Dispose ()
Есть ли польза от этого?
Если да, оправдывают ли преимущества затраты на утилизацию и создание таймера?
Спасибо за вашу помощь.