コード例 #1
0
        public async Task TestSimpleAsyncQueueMerging()
        {
            var simpleQueue = new SimpleAsyncWorkerQueue <int>();

            var first = simpleQueue.QueueOrMergeAsync(1, async delegate
            {
                await Task.Delay(1000);

                return(1);
            });

            var second = simpleQueue.QueueOrMergeAsync(2, async delegate
            {
                await Task.Delay(1000);

                return(50);
            });

            var secondReplacement = simpleQueue.QueueOrMergeAsync(2, async delegate
            {
                await Task.Delay(1000);

                return(2);
            });

            await Task.Delay(1500);

            Assert.AreEqual(1, first.Result);
            Assert.IsFalse(second.IsCompleted);
            Assert.IsFalse(secondReplacement.IsCompleted);

            await Task.Delay(1000);

            Assert.AreEqual(2, second.Result);
            Assert.AreEqual(2, secondReplacement.Result);

            var secondButNew = simpleQueue.QueueOrMergeAsync(2, async delegate
            {
                await Task.Delay(1000);

                return(22);
            });

            var secondButAlreadyRunning = simpleQueue.QueueOrMergeAsync(2, async delegate
            {
                await Task.Delay(1000);

                return(222);
            });

            Assert.AreEqual(22, await secondButNew);

            await Task.Delay(500);

            Assert.IsFalse(secondButAlreadyRunning.IsCompleted);
            await Task.Delay(1000);

            Assert.AreEqual(222, secondButAlreadyRunning.Result);
        }
コード例 #2
0
        public async Task TestSimpleAsyncQueue()
        {
            var simpleQueue = new SimpleAsyncWorkerQueue <int>();

            var first = simpleQueue.QueueAsync(async delegate
            {
                await Task.Delay(1000);

                return(1);
            });

            var second = simpleQueue.QueueAsync(async delegate
            {
                await Task.Delay(1000);

                return(2);
            });

            await Task.Delay(1500);

            Assert.AreEqual(1, first.Result);
            Assert.IsFalse(second.IsCompleted);

            await Task.Delay(1000);

            Assert.AreEqual(2, second.Result);

            var third = simpleQueue.QueueAsync(async delegate
            {
                await Task.Delay(1000);

                return(3);
            });

            Assert.AreEqual(3, await third);
        }