annotate Implab/FuncTaskT.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
144
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
1 using System;
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
2
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
3 namespace Implab {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
4 public class FuncTask<TArg, TResult> : FuncTaskBase<TResult>, IDeferred<TArg> {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
5 readonly Func<TArg, TResult> m_task;
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
6
149
eb793fbbe4ea fixed promises cancellation
cin
parents: 144
diff changeset
7 public FuncTask(Func<TArg, TResult> task, Func<Exception, TResult> error,Func<Exception, TResult> cancel, bool autoCancellable) : base(error,cancel, autoCancellable) {
144
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
8 m_task = task;
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
9 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
10
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
11 public void Resolve(TArg value) {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
12 if (m_task != null && LockCancelation()) {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
13 try {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
14 SetResult(m_task(value));
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
15 } 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
16 HandleCancelInternal(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
17 } catch(Exception err) {
144
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
18 HandleErrorInternal(err);
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
19 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
20 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
21 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
22 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
23 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
24