예제 #1
0
        public async Task AsyncExecution()
        {
            int callCount1 = 0;
            int callCount2 = 0;
            int callCount3 = 0;
            TaskCompletionSource <object> checkpointLatch = new TaskCompletionSource <object>();
            TaskCompletionSource <object> blockingLatch   = new TaskCompletionSource <object>();

            var startupTaskExecutor = new StartupTaskExecutor(new[]
            {
                new SimpleStartupTask(() => { callCount1++; checkpointLatch.SetResult(null); return(Task.CompletedTask); }),
                new SimpleStartupTask(async() => { await blockingLatch.Task; callCount2++; }),
                new SimpleStartupTask(() => { callCount3++; return(Task.CompletedTask); })
            });

            var executionTask = startupTaskExecutor.ExecuteTasks();
            await checkpointLatch.Task;

            Assert.AreEqual(1, callCount1);
            Assert.AreEqual(0, callCount2);
            Assert.AreEqual(1, callCount3);
            Assert.IsFalse(executionTask.IsCompleted);

            blockingLatch.SetResult(null);
            await executionTask;

            Assert.AreEqual(1, callCount1);
            Assert.AreEqual(1, callCount2);
            Assert.AreEqual(1, callCount3);
            Assert.IsTrue(executionTask.IsCompleted);
        }
        public async Task ExecuteThrowsForAny()
        {
            var task1 = Substitute.For <IStartupTask>();

            var task2 = Substitute.For <IStartupTask>();

            task2.ExecuteAsync(Arg.Any <CancellationToken>())
            .Throws(new InvalidOperationException());

            var logger = Substitute.For <ILogger <StartupTaskExecutor> >();

            var executor = new StartupTaskExecutor(new[] { task1, task2 }, logger);
            await Assert.ThrowsAsync <InvalidOperationException>(
                async() => await executor.ExecuteAsync(CancellationToken.None));
        }
        public async Task ExecutesAll()
        {
            var task1  = Substitute.For <IStartupTask>();
            var task2  = Substitute.For <IStartupTask>();
            var logger = Substitute.For <ILogger <StartupTaskExecutor> >();

            var executor = new StartupTaskExecutor(new [] { task1, task2 }, logger);
            await executor.ExecuteAsync(CancellationToken.None);

            await task1.Received(1)
            .ExecuteAsync(Arg.Any <CancellationToken>());

            await task2.Received(1)
            .ExecuteAsync(Arg.Any <CancellationToken>());
        }
예제 #4
0
        public async Task ExecutesEachTask()
        {
            int callCount1          = 0;
            int callCount2          = 0;
            var startupTaskExecutor = new StartupTaskExecutor(new[]
            {
                new SimpleStartupTask(() => { callCount1++; return(Task.CompletedTask); }),
                new SimpleStartupTask(() => { callCount2++; return(Task.CompletedTask); })
            });

            await startupTaskExecutor.ExecuteTasks();

            Assert.AreEqual(1, callCount1);
            Assert.AreEqual(1, callCount2);
        }