예제 #1
0
        /// <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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 internal void Start()
 {
     _head = _queue.DeleteMin();
     TimerCallbackHandler(null);
 }