/// <summary>
 /// Transitions the underlying <see cref="Task"/> into the
 /// <see cref="TaskStatus.RanToCompletion"/> state. The awaiting code is executed
 /// asynchronously so it won't block the caller of this method.
 /// </summary>
 /// <typeparam name="T">The type of the result.</typeparam>
 /// <param name="tcs"></param>
 /// <param name="result">The result value to bind to this <see cref="Task"/>.</param>
 public static void SetResultAsync <T>(this TaskCompletionSource <T> tcs, T result)
 {
     FakeSynchronizationContext.Execute(() => tcs.SetResult(result));
 }
 /// <summary>
 /// Attempts to transition the underlying <see cref="Task"/> into the
 /// <see cref="TaskStatus.RanToCompletion"/> state. The awaiting code is executed
 /// asynchronously so it won't block the caller of this method.
 /// </summary>
 /// <typeparam name="T">The type of the result.</typeparam>
 /// <param name="tcs"></param>
 /// <param name="result">The result value to bind to this <see cref="Task"/>.</param>
 /// <returns>True if the operation was successful; otherwise, false.</returns>
 public static bool TrySetResultAsync <T>(this TaskCompletionSource <T> tcs, T result)
 {
     return(FakeSynchronizationContext.Execute(() => tcs.TrySetResult(result)));
 }