Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }