示例#1
0
        public IPromise JoinParallel(IEnumerable <IPromise> promisesAsEum)
        {
            var promises = promisesAsEum.ToList();
            var result   = new ManualPromise(this, _taskFactory);

            result.Start();

            foreach (var promise in promises)
            {
                promise.Then(() =>
                {
#if DEBUG
                    var states = promises.Select(x => x.State).ToList();
#endif

                    if (promises.All(x => x.State == AsyncState.Completed))
                    {
                        result.SetCompleted();
                    }
                }).Finally(error =>
                {
                    if (promise.State == AsyncState.Failed)
                    {
                        result.SetFailed(error);
                    }
                });
            }

            return(result);
        }
示例#2
0
        public IPromise <T> StartFailed <T>(Exception error)
        {
            var ret = new ManualPromise <T>(this, _taskFactory);

            ret.Start();
            ret.SetFailed(error);

            return(ret);
        }
示例#3
0
        public IPromise StartNew()
        {
            var ret = new ManualPromise(this, _taskFactory);

            ret.Start();
            ret.SetCompleted();

            return(ret.Immediately);
        }
示例#4
0
        public IPromise <T> StartNew <T>(T value)
        {
            var ret = new ManualPromise <T>(this, _taskFactory);

            ret.Start();
            ret.SetResult(value);
            ret.SetCompleted();

            return(ret.Immediately);
        }
示例#5
0
        public IPromise Then(Func <IPromise> continuation)
        {
            var promise = new ManualPromise();

            Then(() => continuation()
                 .Then(() => promise
                       .Satisfy())
                 );

            return(promise);
        }
示例#6
0
        public IPromise Sleep(int ms)
        {
            var ret = new ManualPromise(this, _taskFactory);

            SetTimeout(() =>
            {
                ret.Resolve();
            }, ms).Catch(err =>
            {
                ret.Reject(err);
            });

            return(ret);
        }