示例#1
0
        public async Task <TResult> ExecuteUnsafe <TResult>(RunContext runContext, CancellationToken cancellationToken)
        {
            TestOperationStatus.AssertNotStarted(this.Status);

            var nestedRunContext = this.sourceContext != null
                                ? runContext.MakeNested(this.sourceContext.Value)
                                : runContext;

            this.Status = new TestOperationStatus.Waiting(this.Status, runContext.MakeWaitContext());

            try
            {
                var result = await this.ExecuteInner(nestedRunContext, cancellationToken);

                this.Status = new TestOperationStatus.Completed(this.Status);
                return((TResult)(object)result);                // See the Execute extension method for why this is safe.
            }
            catch (OperationCanceledException)
            {
                this.Status = new TestOperationStatus.Canceled(this.Status);
                throw;
            }
            catch (Exception e)
            {
                this.Status = new TestOperationStatus.Failed(this.Status, e, nestedRunContext.SourceContext);
                throw;
            }
        }
示例#2
0
        public async Task <TSecond> Execute(
            TFirst source,
            RunContext runContext,
            CancellationToken cancellationToken)
        {
            this.creationStatus =
                new TestOperationStatus.Waiting(this.creationStatus, runContext.MakeWaitContext());

            try
            {
                this.executionState = this.makeContinuation(source);
            }
            catch (Exception e)
            {
                this.creationStatus =
                    new TestOperationStatus.Failed(this.creationStatus, e, runContext.SourceContext);
                throw;
            }

            this.creationStatus = new TestOperationStatus.Completed(this.creationStatus);
            return(await this.executionState.Execute(runContext, cancellationToken));
        }