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); }
public IPromise <T> StartFailed <T>(Exception error) { var ret = new ManualPromise <T>(this, _taskFactory); ret.Start(); ret.SetFailed(error); return(ret); }
public IPromise StartNew() { var ret = new ManualPromise(this, _taskFactory); ret.Start(); ret.SetCompleted(); return(ret.Immediately); }
public IPromise <T> StartNew <T>(T value) { var ret = new ManualPromise <T>(this, _taskFactory); ret.Start(); ret.SetResult(value); ret.SetCompleted(); return(ret.Immediately); }
public IPromise Then(Func <IPromise> continuation) { var promise = new ManualPromise(); Then(() => continuation() .Then(() => promise .Satisfy()) ); return(promise); }
public IPromise Sleep(int ms) { var ret = new ManualPromise(this, _taskFactory); SetTimeout(() => { ret.Resolve(); }, ms).Catch(err => { ret.Reject(err); }); return(ret); }