view Implab/PromiseAll.cs @ 266:254d1f255d87 v3

Добавлена метка v3.0.10 для набора изменений 74e048cbaac8
author cin
date Mon, 16 Apr 2018 19:45:18 +0300
parents 5cb4826c2c2a
children
line wrap: on
line source

using System;
using System.Threading;

namespace Implab
{
    class PromiseAll : IResolvable {
        int m_count;

        readonly Deferred m_deferred;

        public bool Done {
            get { return m_deferred.Promise.IsResolved; }
        }

        public IPromise ResultPromise {
            get { return m_deferred.Promise; }
        }

        public void AddPromise(IPromise promise) {
            Interlocked.Increment(ref m_count);
        }

        public PromiseAll(Deferred deferred) {
            m_deferred = deferred;
        }

        public void Resolve() {
            if (Interlocked.Decrement(ref m_count) == 0)
                m_deferred.Resolve();
        }

        public void Complete() {
            Resolve();
        }

        public void Reject(Exception error) {
            m_deferred.Reject(error);
        }
    }
}