public async Task TaskRunnerBase_Throws_PartitionKillerException() { var knownKillerExceptions = new List <Exception>() { new OutOfMemoryException() }; foreach (var exception in knownKillerExceptions) { var sut = new TaskRunnerActual((ct => { return(new List <TaskRunnerInformationBase>() { GetTaskRunnerInformation <object>(() => { throw(exception); }, null, null, null, ct) }); })); var task = Task.Run(() => sut.OuterRun(CancellationToken.None)); var e = await Assert.ThrowsAsync <AggregateException>(async() => { await task.ConfigureAwait(false); }); Assert.True(e.InnerException.GetType() == exception.GetType(), $"Expected exception to be {exception.GetType()}, was {task.Exception.InnerException.GetType()} instead"); } }
public async Task TaskRunnerBase_Cancels_AfterCancellationRequested() { var counter = 0; var sut = new TaskRunnerActual((ct => { return(new List <TaskRunnerInformationBase>() { GetTaskRunnerInformation <object>(async() => { counter++; await Task.Delay(Timeout.Infinite); }, null, null, null, ct) }); })); var source = new CancellationTokenSource(); var task = Task.Run(() => sut.OuterRun(source.Token)); await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false); source.Cancel(); Assert.True(counter == 1, $"Expected thread to only run once, ran {counter} times instead"); Assert.True(sut.InitialCancellationToken.IsCancellationRequested == true, $"Expected cancellation token passed into SUT to be cancelled"); Assert.True(sut.LinkedCancellationToken.IsCancellationRequested == true, $"Expected linked cancellation token created in SUT to be cancelled"); await task.AwaitCompleteOrCancel(); }