public void FuncTask_ActionContinuation_Fact() { FuncTask task = null; ActionTask continuation = null; task = Task.Run(() => { task.HasStarted.ShouldBeTrue(); continuation.HasStarted.ShouldBeFalse(); return("task"); }); continuation = task.ContinueWith(previous => { previous.Id.ShouldEqual(task.Id); previous.IsComplete.ShouldBeTrue(); previous.Result.ShouldEqual("task"); previous.Exception.ShouldBeNull(); continuation.HasStarted.ShouldBeTrue(); }); task.ShouldNotBeNull(); continuation.ShouldNotBeNull(); task.HasStarted.ShouldBeTrue(); continuation.HasStarted.ShouldBeFalse(); //NB waiting on first task should not be required! //task1.Wait(); //task1.IsComplete.ShouldBeTrue(); continuation.Wait(); task.Status.ShouldEqual(TaskStatus.RanToCompletion); continuation.Status.ShouldEqual(TaskStatus.RanToCompletion); EnsureQuietDisposal(task); EnsureQuietDisposal(continuation); }
public void FuncTask_ObserveViaContinuation_Fact() { FuncTask task = Task.Run(() => { throw new Exception("thrown in task"); return("we should not see this"); }); ActionTask continuation = task.ContinueWith(previous => { previous.Status.ShouldEqual(TaskStatus.Faulted); var aggregateException = previous.Exception; aggregateException[0].Message.ShouldEqual("thrown in task"); }); continuation.Wait(); EnsureQuietDisposal(task); EnsureQuietDisposal(continuation); }