/// <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); }
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)); }