annotate Implab/FuncChainTask.cs @ 187:dd4a3590f9c6 ref20160224

Reworked cancelation handling, if the cancel handler isn't specified the OperationCanceledException will be handled by the error handler Any unhandled OperationCanceledException will cause the promise cancelation
author cin
date Tue, 19 Apr 2016 17:35:20 +0300
parents eb793fbbe4ea
children 40d7fed4a09e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
1 using System;
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
2
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
3 namespace Implab {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
4 public class FuncChainTask<TResult> : FuncChainTaskBase<TResult>, IDeferred {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
5 readonly Func<IPromise<TResult>> m_task;
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
6
149
eb793fbbe4ea fixed promises cancellation
cin
parents: 145
diff changeset
7 public FuncChainTask(Func<IPromise<TResult>> task, Func<Exception, IPromise<TResult>> error, Func<Exception, IPromise<TResult>> cancel, bool autoCancellable)
eb793fbbe4ea fixed promises cancellation
cin
parents: 145
diff changeset
8 : base(error, cancel, autoCancellable) {
145
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
9 m_task = task;
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
10 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
11
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
12 public void Resolve() {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
13 if (m_task != null && LockCancelation()) {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
14 try {
149
eb793fbbe4ea fixed promises cancellation
cin
parents: 145
diff changeset
15 var operation = m_task();
187
dd4a3590f9c6 Reworked cancelation handling, if the cancel handler isn't specified the OperationCanceledException will be handled by the error handler
cin
parents: 149
diff changeset
16 operation.On(SetResult, HandleErrorInternal, HandleCancelInternal);
149
eb793fbbe4ea fixed promises cancellation
cin
parents: 145
diff changeset
17 CancellationRequested(operation.Cancel);
187
dd4a3590f9c6 Reworked cancelation handling, if the cancel handler isn't specified the OperationCanceledException will be handled by the error handler
cin
parents: 149
diff changeset
18 } catch (OperationCanceledException reason) {
dd4a3590f9c6 Reworked cancelation handling, if the cancel handler isn't specified the OperationCanceledException will be handled by the error handler
cin
parents: 149
diff changeset
19 HandleCancelInternal(reason);
145
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
20 } catch (Exception err) {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
21 HandleErrorInternal(err);
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
22 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
23 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
24 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
25 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
26 }