/// <summary> /// Сброс задачи. После чего она будет готова к выполнению через заданный период. /// </summary> public void Reset() { ConditionalLock(() => { Interlocked.Exchange(ref _executionsCount, 0); _startedTimeMSec = TimerJob.GetNowMSec(); }); }
/// <summary> /// Активация задачи. После чего она сразу готова к выполнению. /// </summary> public void Activate() { ConditionalLock(() => { Interlocked.Exchange(ref _executionsCount, 0); _startedTimeMSec = TimerJob.GetNowMSec() - _periodMSec; }); }
/// <summary> /// Возвращает время от текущего момента до следующего исполнения. /// </summary> /// <returns></returns> public long GetMSecToNextExecution() { long nextTime = 0; ConditionalLock(() => { nextTime = _startedTimeMSec + (Interlocked.Read(ref _executionsCount) + 1) * _periodMSec; }); return(nextTime - TimerJob.GetNowMSec()); }