internal void Suspend()
{
if (IsPaused) return;
// cancel previous timer
CancelDelayTokenSource.Cancel();
CancelDelayTokenSource = new CancellationTokenSource();
// save the delay of the next fire when restarting
var now = DateTime.Now;
TimeStart = FireDate.Value - now;
//AdjustFactory.Logger.Verbose("TimerCycle Suspend timeStart:{0}, fireDate:{1}, now:{2}",
// TimeStart.TotalMilliseconds, FireDate.Value.ToString("HH:mm:ss.fff"), now.ToString("HH:mm:ss.fff"));
IsPaused = true;
}