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); }
public static void GetCallbackAndState(this Timer timer, out TimerCallback callback, out object state) => TimerQueueTimerAccessor.GetCallbackAndState(timer.GetTimerQueueTimer(), out callback, out state);
public static void SetCallbackAndState(this Timer timer, TimerCallback callback, object state) => TimerQueueTimerAccessor.SetCallbackAndState(timer.GetTimerQueueTimer(), callback, state);
public static void GetSettings(this Timer timer, out DateTime?startTime, out TimeSpan?initialDelay, out TimeSpan?interval) => TimerQueueTimerAccessor.GetSettings(timer.GetTimerQueueTimer(), out startTime, out initialDelay, out interval);