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);
 }