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>()); }
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); }