コード例 #1
0
        public void ClearConsumers()
        {
            sharedQueue.Close(); // Dequeue will stop blocking and throw an EndOfStreamException

            lock (sharedQueueLock)
            {
                logger.DebugWrite("Clearing consumer subscriptions");
                sharedQueue = new SharedQueue();
                subscriptions.Clear();
            }
        }
コード例 #2
0
        public void TestEnumerator()
        {
            var queue   = new SharedQueue();
            var c1      = new VolatileInt();
            var c2      = new VolatileInt();
            var thread1 = new Thread(() => { foreach (int v in queue)
                                             {
                                                 c1.v += v;
                                             }
                                     });
            var thread2 = new Thread(() => { foreach (int v in queue)
                                             {
                                                 c2.v += v;
                                             }
                                     });

            thread1.Start();
            thread2.Start();
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
            queue.Close();
            thread1.Join();
            thread2.Join();
            Assert.AreEqual(6, c1.v + c2.v);
        }
コード例 #3
0
        public void TestEnumerator()
        {
            SharedQueue q  = new SharedQueue();
            VolatileInt c1 = new VolatileInt();
            VolatileInt c2 = new VolatileInt();
            Thread      t1 = new Thread(delegate() {
                foreach (int v in q)
                {
                    c1.v += v;
                }
            });
            Thread t2 = new Thread(delegate() {
                foreach (int v in q)
                {
                    c2.v += v;
                }
            });

            t1.Start();
            t2.Start();
            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);
            q.Close();
            t1.Join();
            t2.Join();
            Assert.AreEqual(6, c1.v + c2.v);
        }
コード例 #4
0
        public void CloseBehviour()
        {
            var queue = new SharedQueue();

            queue.Enqueue("Hello World");
            //queue.Close();

            var item = queue.Dequeue().ToString();

            Console.Out.WriteLine("item = {0}", item);

            ThreadPool.QueueUserWorkItem(state =>
            {
                // expect the queue to block here
                Console.WriteLine("Dequeue in thread");
                try
                {
                    var item2 = queue.Dequeue().ToString();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in thread\n{0}", e.ToString());
                }
            });

            Thread.Sleep(100);
            Console.WriteLine("Closing queue");
            queue.Close();

            Console.WriteLine("Done");
        }
コード例 #5
0
        public void TestCloseWhenWaiting()
        {
            var q  = new SharedQueue();
            var de = new DelayedEnqueuer(q, 0, null);
            var t  =
                new Thread(de.BackgroundEofExpectingDequeue);

            t.Start();
            Thread.Sleep(SafetyMargin);
            q.Close();
            t.Join();
        }
コード例 #6
0
        public void TestCloseWhenFull()
        {
            var q = new SharedQueue();

            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);
            q.Close();
            var de = new DelayedEnqueuer(q, 0, 4);

            ExpectEof(de.EnqueueValue);
            Assert.AreEqual(1, q.Dequeue());
            Assert.AreEqual(2, q.DequeueNoWait(0));
            bool r = q.Dequeue(TimeSpan.FromMilliseconds(1), out object v);

            Assert.IsTrue(r);
            Assert.AreEqual(3, v);
            ExpectEof(de.Dequeue);
        }
コード例 #7
0
        public void TestCloseWhenFull()
        {
            SharedQueue q = new SharedQueue();
            object      v;

            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);
            q.Close();
            DelayedEnqueuer de = new DelayedEnqueuer(q, 0, 4);

            ExpectEof(new Thunk(de.EnqueueValue));
            Assert.AreEqual(1, q.Dequeue());
            Assert.AreEqual(2, q.DequeueNoWait(0));
            bool r = q.Dequeue(1, out v);

            Assert.IsTrue(r);
            Assert.AreEqual(3, v);
            ExpectEof(new Thunk(de.Dequeue));
        }
コード例 #8
0
 ///<summary>Overrides DefaultBasicConsumer's OnCancel
 ///implementation, extending it to call the Close() method of
 ///the SharedQueue.</summary>
 public override void OnCancel()
 {
     m_queue.Close();
     base.OnCancel();
 }
コード例 #9
0
 public void Teardown()
 {
     input.Close();
     output.Close();
 }
コード例 #10
0
 /// <summary>
 /// Освободить используемые ресурсы.
 /// </summary>
 public void Dispose()
 {
     _queue.Close();
 }
コード例 #11
0
 /// <summary>
 /// Closes this instance.
 /// </summary>
 public void Close()
 {
     _sharedQueue.Close();
 }