public static bool TryGetTimerStartAndDelay(Task delayPromise, out DateTime startTime, out TimeSpan delay) { if (TryGetTimer(delayPromise, out var timerObject)) { object timerQueueTimer; if (TimerQueueTimerAccessor.IsTimerQueueTimer(timerObject)) { timerQueueTimer = timerObject; } else if (timerObject is Timer timer) { timerQueueTimer = timer.GetTimerQueueTimer(); } else { throw new InvalidOperationException("unknown timer type"); } TimerQueueTimerAccessor.GetSettings(timerQueueTimer, out var start, out var initialDelay, out var interval); if (start.HasValue && initialDelay.HasValue) { startTime = start.Value; delay = initialDelay.Value; return(true); } } startTime = default(DateTime); delay = default(TimeSpan); return(false); }
public static bool TryCancelTimer(Task delayPromise) { if (TryGetTimer(delayPromise, out var timerObject)) { if (TimerQueueTimerAccessor.IsTimerQueueTimer(timerObject)) { TimerQueueTimerAccessor.Close(timerObject); } else if (timerObject is Timer timer) { timer.Dispose(); } else { throw new InvalidOperationException("unknown timer type"); } return(true); } return(false); }