Example #1
0
        private Task ScheduleNextAsync()
        {
            if (!_running)
            {
                return(Task.CompletedTask);
            }

            DateTimeOffset?next = _cronExpression.GetNextValidTimeAfter(DateTimeOffset.Now);

            if (next.HasValue)
            {
                DateTime utc  = next.Value.UtcDateTime;
                DateTime now  = DateTime.UtcNow;
                TimeSpan span = utc - now;

                if (!_running)
                {
                    return(Task.CompletedTask);
                }

                _sub = _scheduler.Schedule(_action, span);

#if DEBUG
                Console.WriteLine(span);
#endif
            }

            return(Task.CompletedTask);
        }
Example #2
0
 /// <summary>
 ///     Schedule an action at a DateTime with an interval
 /// </summary>
 /// <param name="scheduler"></param>
 /// <param name="action"></param>
 /// <param name="when"></param>
 /// <param name="interval"></param>
 /// <returns></returns>
 public static IDisposable Schedule(this IAsyncScheduler scheduler, Func <Task> action, DateTime when,
                                    TimeSpan interval) =>
 scheduler.Schedule(action, when - DateTime.Now, interval);
Example #3
0
 /// <summary>
 ///     Schedule an action at a DateTime
 /// </summary>
 /// <param name="scheduler"></param>
 /// <param name="action"></param>
 /// <param name="when"></param>
 /// <returns></returns>
 public static IDisposable Schedule(this IAsyncScheduler scheduler, Func <Task> action, DateTime when) =>
 scheduler.Schedule(action, when - DateTime.Now);