Mercurial > pub > ImplabNet
comparison Implab/PromiseAll.cs @ 248:5cb4826c2c2a v3
Added awaiters to promises
Added static methods to Promise Resolve, Reject, All.
Updated promise helpers
author | cin |
---|---|
date | Tue, 30 Jan 2018 01:37:17 +0300 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
247:fb70574741a1 | 248:5cb4826c2c2a |
---|---|
1 using System; | |
2 using System.Threading; | |
3 | |
4 namespace Implab | |
5 { | |
6 class PromiseAll : IResolvable { | |
7 int m_count; | |
8 | |
9 readonly Deferred m_deferred; | |
10 | |
11 public bool Done { | |
12 get { return m_deferred.Promise.IsResolved; } | |
13 } | |
14 | |
15 public IPromise ResultPromise { | |
16 get { return m_deferred.Promise; } | |
17 } | |
18 | |
19 public void AddPromise(IPromise promise) { | |
20 Interlocked.Increment(ref m_count); | |
21 } | |
22 | |
23 public PromiseAll(Deferred deferred) { | |
24 m_deferred = deferred; | |
25 } | |
26 | |
27 public void Resolve() { | |
28 if (Interlocked.Decrement(ref m_count) == 0) | |
29 m_deferred.Resolve(); | |
30 } | |
31 | |
32 public void Complete() { | |
33 Resolve(); | |
34 } | |
35 | |
36 public void Reject(Exception error) { | |
37 m_deferred.Reject(error); | |
38 } | |
39 } | |
40 } |