comparison Implab/FuncChainTask.cs @ 149:eb793fbbe4ea v2

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