Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        // 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);
                }
            }
        }
Exemple #4
0
        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 _));
        }