public static T Wait <T>(this ISuccessfulAwaiter <T> awaiter)
        {
            if (!awaiter.IsCompleted)
            {
                var evt = new ManualResetEventSlim();
                awaiter.OnCompleted(evt.Set);
                evt.Wait();
            }

            return(awaiter.GetResult());
        }
        public static void Wait(this ISuccessfulAwaiter awaiter)
        {
            if (!awaiter.IsCompleted)
            {
                var evt = new ManualResetEventSlim();
                awaiter.OnCompleted(evt.Set);
                evt.Wait();
            }

            awaiter.GetResult();
            return;
        }
 public SuccessfulAwaiterTransform(ISuccessfulAwaiter <I> awaiter, Func <I, O> transform)
 {
     _awaiter   = awaiter;
     _transform = transform;
 }
 public static ISuccessfulAwaiter <O> Map <I, O>(this ISuccessfulAwaiter <I> awaiter, Func <I, O> transform)
 {
     return(new SuccessfulAwaiterTransform <I, O>(awaiter, transform));
 }
 public static ISuccessfulAwaiter GetAwaiter(this ISuccessfulAwaiter awaiter)
 {
     return(awaiter);
 }
 public static ISuccessfulAwaiter <T> GetAwaiter <T>(this ISuccessfulAwaiter <T> awaiter)
 {
     return(awaiter);
 }