Exemplo n.º 1
0
        public async Task MultithreadTest()
        {
            int taskCount = 20;
            var queue     = new ConcurrentCircularQueue <DataClass>(_testList.Count * taskCount);

            List <Task> taskList = new List <Task>();

            for (int i = 0; i < taskCount; ++i)
            {
                taskList.Add(EnqueueTest(queue));
            }

            await Task.WhenAll(taskList);

            Assert.AreEqual(_testList.Count * taskCount, queue.Count);

            var sortedQueue = new List <DataClass>(queue.ToArray());

            sortedQueue.Sort((x, y) => x.Value.CompareTo(y.Value));

            for (int x = 0; x < _testList.Count; ++x)
            {
                for (int y = 0; y < taskCount; ++y)
                {
                    Assert.AreSame(_testList[x], sortedQueue[x * taskCount + y]);
                }
            }

            var queue2 = new ConcurrentCircularQueue <DataClass>(_testList.Count);

            taskList.Clear();
            for (int i = 0; i < taskCount; ++i)
            {
                taskList.Add(EnqueueDequeueTest(queue2));
            }

            await Task.WhenAll(taskList);

            Assert.AreEqual(0, queue2.Count);
        }