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; } }
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)); }