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 } |