Mercurial > pub > ImplabNet
comparison Implab/ActionChainTask.cs @ 149:eb793fbbe4ea v2
fixed promises cancellation
| author | cin |
|---|---|
| date | Wed, 06 May 2015 17:11:27 +0300 |
| parents | 706fccb85524 |
| children | 822aab37b107 |
comparison
equal
deleted
inserted
replaced
| 148:e6d4b41f0101 | 149:eb793fbbe4ea |
|---|---|
| 2 | 2 |
| 3 namespace Implab { | 3 namespace Implab { |
| 4 public class ActionChainTask : ActionChainTaskBase, IDeferred { | 4 public class ActionChainTask : ActionChainTaskBase, IDeferred { |
| 5 readonly Func<IPromise> m_task; | 5 readonly Func<IPromise> m_task; |
| 6 | 6 |
| 7 public ActionChainTask(Func<IPromise> task, Func<Exception, IPromise> error, Func<Exception, IPromise> cancel) : base(error,cancel) { | 7 public ActionChainTask(Func<IPromise> task, Func<Exception, IPromise> error, Func<Exception, IPromise> cancel, bool autoCancellable) : base(error,cancel, autoCancellable) { |
| 8 m_task = task; | 8 m_task = task; |
| 9 } | 9 } |
| 10 | 10 |
| 11 public void Resolve() { | 11 public void Resolve() { |
| 12 if (m_task != null && LockCancelation()) { | 12 if (m_task != null && LockCancelation()) { |
| 13 try { | 13 try { |
| 14 Observe(m_task()); | 14 var p = m_task(); |
| 15 p.On(SetResult, HandleErrorInternal, SetCancelled); | |
| 16 CancellationRequested(p.Cancel); | |
| 15 } catch(Exception err) { | 17 } catch(Exception err) { |
| 16 HandleErrorInternal(err); | 18 HandleErrorInternal(err); |
| 17 } | 19 } |
| 18 } | 20 } |
| 19 } | 21 } |
