Mercurial > pub > ImplabNet
comparison Implab/FuncChainTaskT.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<TArg,TResult> : FuncChainTaskBase<TResult>, IDeferred<TArg> { | 4 public class FuncChainTask<TArg,TResult> : FuncChainTaskBase<TResult>, IDeferred<TArg> { |
5 readonly Func<TArg, IPromise<TResult>> m_task; | 5 readonly Func<TArg, IPromise<TResult>> m_task; |
6 | 6 |
7 public FuncChainTask(Func<TArg, IPromise<TResult>> task, Func<Exception, IPromise<TResult>> error, Func<Exception, IPromise<TResult>> cancel) : base(error, cancel){ | 7 public FuncChainTask(Func<TArg, IPromise<TResult>> task, Func<Exception, IPromise<TResult>> error, Func<Exception, IPromise<TResult>> cancel, bool autoCancellable) : base(error, cancel, autoCancellable){ |
8 m_task = task; | 8 m_task = task; |
9 } | 9 } |
10 | 10 |
11 public void Resolve(TArg value) { | 11 public void Resolve(TArg value) { |
12 if (m_task != null && LockCancelation()) { | 12 if (m_task != null && LockCancelation()) { |
13 try { | 13 try { |
14 Observe(m_task(value)); | 14 var operation = m_task(value); |
15 operation.On(SetResult, HandleErrorInternal, SetCancelled); | |
16 CancellationRequested(operation.Cancel); | |
15 } catch (Exception err) { | 17 } catch (Exception err) { |
16 HandleErrorInternal(err); | 18 HandleErrorInternal(err); |
17 } | 19 } |
18 } | 20 } |
19 } | 21 } |