public void WhenChainingTypedTasksWithThenShouldChain() { // Arrange var stringBuilder = new StringBuilder(); var s = new TaskImmediateScheduler(); // Act Task.Factory.StartNew(() => stringBuilder.Append("Hello"), s) .Then(sb => sb.Append(" "), s) .Then(sb => sb.Append("World"), s); // Assert Assert.That(stringBuilder.ToString(), Is.EqualTo("Hello World")); }
public void WhenChainingTypedTasksWithExceptionShouldCatch() { // Arrange var stringBuilder = new StringBuilder(); var s = new TaskImmediateScheduler(); // Act Task.Factory.StartNew(() => stringBuilder.Append("Hello"), s) .Then(sb => { throw new Exception(" Exception!"); }, s) .Then <StringBuilder>(sb => sb.Append("World"), s) .Catch(ex => stringBuilder.Append(ex.Flatten().InnerExceptions.First().Message), s); // Assert Assert.That(stringBuilder.ToString(), Is.EqualTo("Hello Exception!")); }
public void WhenChainingTypedTasksWithReturnValueAndExceptionShouldCatch() { // Arrange var stringBuilder = new StringBuilder(); var s = new TaskImmediateScheduler(); // Act Task.Factory.StartNew(() => stringBuilder.Append("Hello"), s) .Then(sb => { throw new Exception(" Exception!"); }, s) // ReSharper disable once RedundantTypeArgumentsOfMethod .Then <StringBuilder, StringBuilder>(sb => { // ReSharper disable once ConvertToLambdaExpression return(sb.Append("World")); }, s) .Catch(ex => stringBuilder.Append(ex.Flatten().InnerExceptions.First().Message), s); // Assert Assert.That(stringBuilder.ToString(), Is.EqualTo("Hello Exception!")); }