/// <summary> /// Adds a scheduled job for automatic execution by this service. /// </summary> /// <param name="schedule">A method for computation of occurrences in the schedule, taking last execution as parameter.</param> /// <param name="executionWrapper">The execution wrapper method to be invoked on each occurence of the job.</param> /// <returns>The newly scheduled job.</returns> public ScheduledJob AddScheduledJob(Func <DateTime, DateTime> schedule, JobExecutionWrapper executionWrapper) { var entry = new ScheduledJob(schedule, executionWrapper, SystemTime.UtcNow); _queue.Add(entry); return(entry); }
private void TimerCallbackHandler(object data) { var waitTime = _head.NextOccurence - DateTime.Now; var waitMilliseconds = (long)waitTime.TotalMilliseconds; if (waitMilliseconds > 0) { _timer.Change(waitMilliseconds, Timeout.Infinite); return; } ThreadPool.QueueUserWorkItem(WaitCallbackHandler, _head); _head.Advance(); _queue.Add(_head); _head = _queue.DeleteMin(); TimerCallbackHandler(null); }
internal void Start() { _head = _queue.DeleteMin(); TimerCallbackHandler(null); }