Mercurial > pub > ImplabNet
comparison Implab/AbstractPromise.cs @ 145:706fccb85524 v2
RC: cancellation support for promises + tests
author | cin |
---|---|
date | Sun, 08 Mar 2015 02:52:27 +0300 |
parents | 8c0b95069066 |
children | 97fbbf816844 |
comparison
equal
deleted
inserted
replaced
144:8c0b95069066 | 145:706fccb85524 |
---|---|
16 m_mask = PromiseEventType.Success; | 16 m_mask = PromiseEventType.Success; |
17 } | 17 } |
18 | 18 |
19 public HandlerDescriptor(Action handler, PromiseEventType mask) { | 19 public HandlerDescriptor(Action handler, PromiseEventType mask) { |
20 m_handler = handler; | 20 m_handler = handler; |
21 m_error = null; | |
22 m_cancel = null; | |
21 m_mask = mask; | 23 m_mask = mask; |
22 } | 24 } |
23 | 25 |
24 public void SignalSuccess() { | 26 public void SignalSuccess() { |
25 if (m_mask & PromiseEventType.Success && m_handler != null) { | 27 if ((m_mask & PromiseEventType.Success) != 0 && m_handler != null) { |
26 try { | 28 try { |
27 m_handler(); | 29 m_handler(); |
28 } catch (Exception err) { | 30 } catch (Exception err) { |
29 // avoid calling handler twice in case of error | 31 // avoid calling handler twice in case of error |
30 if (m_error != null) | 32 if (m_error != null) |
38 try { | 40 try { |
39 m_error(err); | 41 m_error(err); |
40 // Analysis disable once EmptyGeneralCatchClause | 42 // Analysis disable once EmptyGeneralCatchClause |
41 } catch { | 43 } catch { |
42 } | 44 } |
43 } else if (m_mask & PromiseEventType.Error && m_handler != null) { | 45 } else if ((m_mask & PromiseEventType.Error ) != 0 && m_handler != null) { |
44 try { | 46 try { |
45 m_handler(); | 47 m_handler(); |
46 // Analysis disable once EmptyGeneralCatchClause | 48 // Analysis disable once EmptyGeneralCatchClause |
47 } catch { | 49 } catch { |
48 } | 50 } |
54 try { | 56 try { |
55 m_cancel(reason); | 57 m_cancel(reason); |
56 } catch (Exception err) { | 58 } catch (Exception err) { |
57 SignalError(err); | 59 SignalError(err); |
58 } | 60 } |
59 } else if (m_mask & PromiseEventType.Cancelled && m_handler != null) { | 61 } else if ( (m_mask & PromiseEventType.Cancelled) != 0 && m_handler != null) { |
60 try { | 62 try { |
61 m_handler(); | 63 m_handler(); |
62 // Analysis disable once EmptyGeneralCatchClause | 64 // Analysis disable once EmptyGeneralCatchClause |
63 } catch { | 65 } catch { |
64 } | 66 } |
82 } | 84 } |
83 | 85 |
84 protected override Signal GetResolveSignal() { | 86 protected override Signal GetResolveSignal() { |
85 var signal = new Signal(); | 87 var signal = new Signal(); |
86 On(signal.Set, PromiseEventType.All); | 88 On(signal.Set, PromiseEventType.All); |
89 return signal; | |
87 } | 90 } |
88 | 91 |
89 #endregion | 92 #endregion |
90 | |
91 | 93 |
92 public Type PromiseType { | 94 public Type PromiseType { |
93 get { | 95 get { |
94 return typeof(void); | 96 return typeof(void); |
95 } | 97 } |