view Implab/PromiseAwaiterT.cs @ 207:558f34b2fb50 v2

added Safe.DispatchEvent() a legacy equivalent for '?.Invoke()' added Safe.Dispose(IEnumerable) added PromiseExtensions.CancellationPoint to add a cancellation point to the chain of promises added IPromise<T> PromiseExtensions.Then<T>(this IPromise<T> that, Action<T> success) overloads added PromiseExtensions.Error() overloads to handle a error or(and) a cancellation
author cin
date Wed, 09 Nov 2016 12:03:22 +0300
parents ec91a6dfa5b3
children cbe10ac0731e
line wrap: on
line source

using System;
using System.Runtime.CompilerServices;

namespace Implab {
    public struct PromiseAwaiter<T> : INotifyCompletion {
        readonly IPromise<T> m_promise;

        public PromiseAwaiter(IPromise<T> promise) {
            m_promise = promise;
        }

        public void OnCompleted (Action continuation) {
            if (m_promise != null)
                m_promise.On(continuation, PromiseEventType.All);
        }

        public T GetResult() {
            return m_promise.Join();
        }

        public bool IsCompleted {
            get {
                return m_promise.IsResolved;
            }
        }
    }
}