Exemplo n.º 1
0
        /// <summary>
        /// Timer Event Starting All Due Tasks
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private void OnTick(object source, ElapsedEventArgs e)
        {
            System.Threading.Interlocked.Exchange(ref NextDueTick, long.MaxValue);

            var nextDueTime = long.MaxValue;

            lock (SchedulerLock)
            {
                ResolveRunningTimers();
                ResolvePendingTimers();

                ConsumePendingScheduledTasks();

                // Schedule Next Tick
                var nextTask = ScheduledTimers.FirstOrDefault();
                if (nextTask.Value != null)
                {
                    nextDueTime = nextTask.Key;
                }
            }

            SignalNextDueTick(nextDueTime);
        }