Mercurial > pub > ImplabNet
comparison Implab/AbstractEvent.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 | eee3e49dd1ff |
children | 34df34841225 |
comparison
equal
deleted
inserted
replaced
247:fb70574741a1 | 248:5cb4826c2c2a |
---|---|
67 Signal(); | 67 Signal(); |
68 } | 68 } |
69 | 69 |
70 protected void WaitTransition() { | 70 protected void WaitTransition() { |
71 if (m_state == TransitionalState) { | 71 if (m_state == TransitionalState) { |
72 SpinWait spin; | 72 SpinWait spin = new SpinWait(); |
73 do { | 73 do { |
74 spin.SpinOnce(); | 74 spin.SpinOnce(); |
75 } while (m_state == TransitionalState); | 75 } while (m_state == TransitionalState); |
76 } | 76 } |
77 } | 77 } |
82 void Signal() { | 82 void Signal() { |
83 THandler handler; | 83 THandler handler; |
84 while (TryDequeueHandler(out handler)) | 84 while (TryDequeueHandler(out handler)) |
85 SignalHandler(handler); | 85 SignalHandler(handler); |
86 } | 86 } |
87 | |
88 #endregion | |
89 | |
90 protected abstract Signal GetFulfillSignal(); | |
91 | |
92 #region synchronization traits | |
93 protected void WaitResult(int timeout) { | |
94 if (!(IsResolved || GetFulfillSignal().Wait(timeout))) | |
95 throw new TimeoutException(); | |
96 } | |
97 | |
98 | 87 |
99 #endregion | 88 #endregion |
100 | 89 |
101 #region handlers managment | 90 #region handlers managment |
102 | 91 |