Пример #1
0
        /// <summary>
        /// Schedules a task to be executed at the specified due time.
        /// </summary>
        /// <param name="dueTime">Absolute time at which to execute the task.</param>
        /// <param name="task">The task to execute.</param>
        /// <param name="scheduler">The scheduler to execute the task on.</param>
        /// <returns>A scheduled work item.</returns>
        public override IWorkItem <TAbsolute> ScheduleAbsolute(TAbsolute dueTime, ISchedulerTask task, IScheduler scheduler)
        {
            if (task == null)
            {
                throw new ArgumentNullException(nameof(task));
            }
            if (scheduler == null)
            {
                throw new ArgumentNullException(nameof(scheduler));
            }

            var item = new WorkItemBase <TAbsolute>(scheduler, task, dueTime, Disposable.Empty);

            item.RecalculatePriority();

            if (item.IsRunnable)
            {
                _ready.Enqueue(item);
            }
            else
            {
                _notReady.Add(item);
            }

            return(item);
        }
Пример #2
0
        public void HeapBasedPriorityQueue_Simple()
        {
            var queue = new HeapBasedPriorityQueue <int>(Comparer <int> .Default);

            Assert.ThrowsException <InvalidOperationException>(() => queue.Peek());
            Assert.ThrowsException <InvalidOperationException>(() => queue.Dequeue());
            Assert.AreEqual(0, queue.Count);

            queue.Enqueue(2);
            queue.Enqueue(1);
            queue.Enqueue(3);
            queue.Enqueue(4);
            queue.Enqueue(5);

            Assert.AreEqual(5, queue.Count);
            Assert.AreEqual(1, queue.Peek());

            for (var i = 0; i <= 9; i++)
            {
                if (i is >= 1 and <= 5)
                {
                    Assert.IsTrue(queue.Contains(i));
                }