private void AddTimer(Minute interval) { long startDateTicks = _startTime.Value.AsUtc().Ticks; long span = interval.AsTimeSpan().Ticks; long cycles; long remainder = Math.DivRem(DateTime.UtcNow.Ticks - startDateTicks, span, out cycles); long dueTime = startDateTicks + (span * (cycles + 1)) - remainder; _timers[interval] = new ThreadingTimer(_timerDelegate, interval, dueTime, span); }
public void RingAtEach(Minute interval, Minute duration) { _duration = duration.AsTimeSpan().Milliseconds; EmptySchedules(); base.AddPeriodicTask(interval, Ring); }