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 }