/// <summary> /// Tries to complete the task completion source with the specified status. /// </summary> private bool TryCompleteWithStatus(TaskStatus status, TResult result, Exception exception) { if (this.Status is TaskStatus.Created) { this.Status = status; if (status is TaskStatus.RanToCompletion) { this.Result = result; } else if (status is TaskStatus.Canceled) { this.CancellationTokenSource.Cancel(); this.Exception = new TaskCanceledException(); } else if (status is TaskStatus.Faulted) { this.Exception = exception; } // Release the resource and notify any awaiting asynchronous operations. this.Resource.SignalAll(); this.Resource.Runtime.ScheduleNextOperation(); return(true); } return(false); }
/// <summary> /// Initializes a new instance of the <see cref="Mock{TResult}"/> class. /// </summary> internal Mock() : base(default) { this.Resource = new Resource(); this.Status = TaskStatus.Created; this.CancellationTokenSource = new CancellationTokenSource(); }
/// <summary> /// Tries to complete the task completion source with the specified status. /// </summary> private bool TryCompleteWithStatus(TaskStatus status, TResult result, Exception exception) { if (this.ResultTask is null) { if (status is TaskStatus.RanToCompletion) { this.ResultTask = Tasks.Task.FromResult(result); } else if (status is TaskStatus.Canceled) { this.CancellationTokenSource.Cancel(); this.ResultTask = Tasks.Task.FromCanceled <TResult>(this.CancellationTokenSource.Token); } else if (status is TaskStatus.Faulted) { this.ResultTask = Tasks.Task.FromException <TResult>(exception); } // Release the resource and notify any awaiting asynchronous operations. this.Resource.SignalAll(); return(true); } return(false); }
/// <summary> /// Completes the task completion source with the specified status. /// </summary> private void CompleteWithStatus(TaskStatus status, TResult result, Exception exception) { if (!this.TryCompleteWithStatus(status, result, exception)) { throw new InvalidOperationException("The underlying Task<TResult> is already in one " + "of the three final states: RanToCompletion, Faulted, or Canceled."); } }