public void LimitedSizeQueueCanClearItems() { var q = new LimitedSizeQueue <int>(3); Assert.IsTrue(q.TryEnqueue(1)); Assert.IsTrue(q.TryEnqueue(2)); Assert.IsTrue(q.TryEnqueue(3)); Assert.IsFalse(q.TryEnqueue(4)); Assert.AreEqual(3, q.Count); Assert.AreEqual(3, q.Limit); q.Clear(); Assert.AreEqual(0, q.Count); Assert.AreEqual(3, q.Limit); var items = string.Join(", ", q.Select(i => i.ToString()).ToArray()); Assert.AreEqual(string.Empty, items); }
public void ZeroLimitMeansUnlimitedSize() { var q = new LimitedSizeQueue <int>(0); foreach (var item in Enumerable.Range(1, 1000)) { Assert.IsTrue(q.TryEnqueue(item)); } q.Clear(); Assert.AreEqual(0, q.Count); Assert.AreEqual(0, q.Limit); }
// Methods to queue work. /// <summary> /// Queues a method for the execution, and specifies an object to be used by the method. /// </summary> /// <param name="work">A <see cref="WaitCallback" /> representing the method to execute.</param> /// <param name="obj">An object containing data to be used by the method.</param> public void QueueUserWorkItem(WaitCallback work, object obj) { WorkItem wi = new WorkItem(work, obj); // If execution context flowing is on, capture the caller's context. if (m_flowExecutionContext) { wi.m_executionContext = ExecutionContext.Capture(); } // Make sure the pool is started (threads created, etc). EnsureStarted(); // Now insert the work item into the queue, possibly waking a thread. lock (m_queue) { m_queue.TryEnqueue(wi); if (m_threadsWaiting > 0) { Monitor.Pulse(m_queue); } } }
public void LimitedSizeQueueLimitsTheSizeOfTheInternalQueue() { var q = new LimitedSizeQueue <int>(3); Assert.AreEqual(0, q.Count); Assert.AreEqual(3, q.Limit); Assert.IsFalse(q.TryPeek(out _)); Assert.IsFalse(q.TryDequeue(out _)); Assert.IsTrue(q.TryEnqueue(1)); Assert.IsTrue(q.TryEnqueue(2)); Assert.IsTrue(q.TryEnqueue(3)); Assert.IsFalse(q.TryEnqueue(4)); Assert.IsFalse(q.TryEnqueue(5)); var items = string.Join(", ", q.Select(i => i.ToString()).ToArray()); Assert.AreEqual("1, 2, 3", items); Assert.IsTrue(q.TryDequeue(out var item)); Assert.AreEqual(1, item); Assert.IsTrue(q.TryEnqueue(6)); Assert.IsFalse(q.TryEnqueue(7)); Assert.IsTrue(q.TryDequeue(out item)); Assert.AreEqual(2, item); Assert.IsTrue(q.TryDequeue(out item)); Assert.AreEqual(3, item); Assert.IsTrue(q.TryPeek(out item)); Assert.AreEqual(6, item); Assert.IsTrue(q.TryDequeue(out item)); Assert.AreEqual(6, item); Assert.IsFalse(q.TryPeek(out _)); Assert.IsFalse(q.TryDequeue(out _)); }