Пример #1
0
        public void CanHaveMultipleWorkers()
        {
            const int workItemCount = 50;
            var       latch         = new CountDownLatch(workItemCount);
            int       errorCount    = 0;
            int       abandonCount  = 0;
            var       queue         = new InMemoryQueue <SimpleWorkItem>(retries: 1, workItemTimeoutMilliseconds: 50, retryDelayMilliseconds: 0);

            Parallel.For(0, workItemCount, i => queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello",
                Id   = i
            }));

            Task.Factory.StartNew(() => queue.StartWorking(w => DoWork(w, latch, ref abandonCount, ref errorCount)));
            Task.Factory.StartNew(() => queue.StartWorking(w => DoWork(w, latch, ref abandonCount, ref errorCount)));
            Task.Factory.StartNew(() => queue.StartWorking(w => DoWork(w, latch, ref abandonCount, ref errorCount)));

            bool success = latch.Wait(2000);

            Assert.True(success, "Failed to receive all work items.");
            Task.Delay(50).Wait();
            Assert.Equal(workItemCount, queue.Completed + queue.DeadletterCount);
            Assert.Equal(errorCount, queue.WorkerErrors);
            Assert.Equal(abandonCount + errorCount, queue.Abandoned);
        }
        public void CanUseQueueWorker() {
            var resetEvent = new AutoResetEvent(false);
            var queue = new InMemoryQueue<SimpleWorkItem>();
            queue.StartWorking(w => {
                Assert.Equal("Hello", w.Value.Data);
                w.CompleteAsync().Wait();
                resetEvent.Set();
            });
            queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello"
            });

            Assert.Equal(1, queue.Count);
            bool success = resetEvent.WaitOne(250);
            Assert.Equal(0, queue.Count);
            Assert.Equal(1, queue.Completed);
            Assert.True(success, "Failed to receive message.");
            Assert.Equal(0, queue.WorkerErrors);
        }
Пример #3
0
        public void CanUseQueueWorker()
        {
            var resetEvent = new AutoResetEvent(false);
            var queue      = new InMemoryQueue <SimpleWorkItem>();

            queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello"
            });

            queue.StartWorking(w => {
                Assert.Equal("Hello", w.Value.Data);
                w.CompleteAsync().Wait();
                resetEvent.Set();
            });

            bool success = resetEvent.WaitOne(250);

            Assert.Equal(0, queue.Count);
            Assert.Equal(1, queue.Completed);
            Assert.True(success, "Failed to receive message.");
            Assert.Equal(0, queue.WorkerErrors);
        }
        public void CanAutoCompleteWorker()
        {
            var resetEvent = new AutoResetEvent(false);
            var queue      = new InMemoryQueue <SimpleWorkItem>(workItemTimeoutMilliseconds: 100);

            queue.StartWorking(w => {
                Assert.Equal("Hello", w.Value.Data);
                resetEvent.Set();
            }, true);
            queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello"
            });

            Assert.Equal(1, queue.Count);
            bool success = resetEvent.WaitOne(100);

            Assert.True(success, "Failed to recieve message.");
            Task.Delay(25).Wait();
            Assert.Equal(0, queue.Count);
            Assert.Equal(1, queue.Completed);
            Assert.Equal(0, queue.WorkerErrors);
        }
        public void CanAutoCompleteWorker() {
            var resetEvent = new AutoResetEvent(false);
            var queue = new InMemoryQueue<SimpleWorkItem>(workItemTimeoutMilliseconds: 100);
            queue.StartWorking(w => {
                Assert.Equal("Hello", w.Value.Data);
                resetEvent.Set();
            }, true);
            queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello"
            });

            Assert.Equal(1, queue.Count);
            bool success = resetEvent.WaitOne(100);
            Assert.True(success, "Failed to receive message.");
            Task.Delay(25).Wait();
            Assert.Equal(0, queue.Count);
            Assert.Equal(1, queue.Completed);
            Assert.Equal(0, queue.WorkerErrors);
        }
        public void CanHaveMultipleWorkers() {
            const int workItemCount = 50;
            var latch = new CountDownLatch(workItemCount);
            int errorCount = 0;
            int abandonCount = 0;
            var queue = new InMemoryQueue<SimpleWorkItem>(retries: 1, workItemTimeoutMilliseconds: 50);
            Task.Factory.StartNew(() => queue.StartWorking(w => DoWork(w, latch, ref abandonCount, ref errorCount)));
            Task.Factory.StartNew(() => queue.StartWorking(w => DoWork(w, latch, ref abandonCount, ref errorCount)));
            Task.Factory.StartNew(() => queue.StartWorking(w => DoWork(w, latch, ref abandonCount, ref errorCount)));

            Parallel.For(0, workItemCount, i => queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello",
                Id = i
            }));

            bool success = latch.Wait(1000);
            Assert.True(success, "Failed to receive all work items.");
            Task.Delay(50).Wait();
            Assert.Equal(workItemCount, queue.Completed + queue.DeadletterCount);
            Assert.Equal(errorCount, queue.WorkerErrors);
            Assert.Equal(abandonCount + errorCount, queue.Abandoned);
        }