Mercurial > pub > ImplabNet
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 } |