Exemple #1
0
        public void Dequeues_until_stopped()
        {
            var messages = new NotifyingSingleQueue <string>();

            messages.Enqueue(0, "a");
            var sut = new Wait_for_work <string>(messages, () =>
            {
                string result;
                var success = messages.TryDequeue(out result);
                return(new Tuple <bool, string>(success, result));
            });

            var results = new List <string>();

            sut.Dequeued += _ => results.Add(_);

            ThreadPool.QueueUserWorkItem(_ => { sut.Dequeue_messages(() => { return(sut._running); }); }, null);

            Thread.Sleep(1000);
            sut.Stop();

            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("a", results[0]);
            string s;

            Assert.IsFalse(messages.TryDequeue(out s));
        }
        public void Stop_sets_termination_flag()
        {
            var messages = new NotifyingSingleQueue<int>();
            var sut = new Wait_for_work<int>(messages, () =>
                                                            {
                                                                int result;
                                                                var success = messages.TryDequeue(out result);
                                                                return new Tuple<bool, int>(success, result);
                                                            });

            sut._running = true;

            sut.Stop();
            Assert.IsFalse(sut._running);
        }
        public void Dequeueing_is_started()
        {
            var messages = new NotifyingSingleQueue<int>();
            var sut = new Wait_for_work<int>(messages, () =>
                                                            {
                                                                int result;
                                                                var success = messages.TryDequeue(out result);
                                                                return new Tuple<bool, int>(success, result);
                                                            });

            var are = new AutoResetEvent(false);
            sut.Start((_) => are.Set());

            Assert.IsTrue(are.WaitOne(500));
        }
Exemple #4
0
        public void Stop_sets_termination_flag()
        {
            var messages = new NotifyingSingleQueue <int>();
            var sut      = new Wait_for_work <int>(messages, () =>
            {
                int result;
                var success = messages.TryDequeue(out result);
                return(new Tuple <bool, int>(success, result));
            });

            sut._running = true;

            sut.Stop();
            Assert.IsFalse(sut._running);
        }
Exemple #5
0
        public void Dequeueing_is_started()
        {
            var messages = new NotifyingSingleQueue <int>();
            var sut      = new Wait_for_work <int>(messages, () =>
            {
                int result;
                var success = messages.TryDequeue(out result);
                return(new Tuple <bool, int>(success, result));
            });

            var are = new AutoResetEvent(false);

            sut.Start((_) => are.Set());

            Assert.IsTrue(are.WaitOne(500));
        }
        public Parallelize(int numberOfThreads, IConcurrentQueue<ScheduledTask> messages)
        {
            _messages = messages;

            _waitForWork = new List<Wait_for_work<ScheduledTask>>();
            for (var i = 0; i < numberOfThreads; i++)
            {
                var wfw = new Wait_for_work<ScheduledTask>(_messages,
                                               () =>
                                               {
                                                   ScheduledTask result;
                                                   var success = _messages.TryDequeue(out result);
                                                   return new Tuple<bool, ScheduledTask>(success, result);
                                               });
                wfw.Dequeued += _ => _.ContinueWith(_.Message);
                _waitForWork.Add(wfw);
            }
        }
        public Serialize(int numberOfThreads, Func<IMessage,string> getQueueNameFromMessage)
        {
            _messages = new NotifyingMultiQueue<ScheduledTask>();
            _getQueueNameFromMessage = getQueueNameFromMessage;

            _waitForWork = new List<Wait_for_work<ScheduledTask>>();
            for (var i = 0; i < numberOfThreads; i++)
            {
                var wfw = new Wait_for_work<ScheduledTask>(_messages,
                                               () =>
                                               {
                                                   ScheduledTask result;
                                                   var success = _messages.TryDequeue(Thread.CurrentThread.GetHashCode().ToString(),
                                                                                      out result);
                                                   return new Tuple<bool, ScheduledTask>(success, result);
                                               });
                wfw.Dequeued += _ => _.ContinueWith(_.Message);
                _waitForWork.Add(wfw);
            }
        }
        public void Dequeues_until_stopped()
        {
            var messages = new NotifyingSingleQueue<string>();
            messages.Enqueue(0, "a");
            var sut = new Wait_for_work<string>(messages, () =>
                                                            {
                                                                string result;
                                                                var success = messages.TryDequeue(out result);
                                                                return new Tuple<bool, string>(success, result);
                                                            });

            var results = new List<string>();
            sut.Dequeued += _ => results.Add(_);

            ThreadPool.QueueUserWorkItem(_ => {	sut.Dequeue_messages(() => {return sut._running; }); }, null);

            Thread.Sleep(1000);
            sut.Stop();

            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("a", results[0]);
            string s;
            Assert.IsFalse(messages.TryDequeue(out s));
        }