Beispiel #1
0
            /// <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);
            }
Beispiel #2
0
 /// <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();
 }
Beispiel #3
0
            /// <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);
            }
Beispiel #4
0
 /// <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.");
     }
 }