annotate Implab/FuncTask.cs @ 209:a867536c68fc v2

Bound promise to CancellationToken Added new states to ExecutionSate enum. Added Safe.Guard() method to handle cleanup of the result of the promise
author cin
date Wed, 16 Nov 2016 03:06:08 +0300
parents 40d7fed4a09e
children eee3e49dd1ff
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 using System.Threading;
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
3
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
4 namespace Implab {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
5 public class FuncTask<T> : FuncTaskBase<T>, IDeferred {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
6 readonly Func<T> m_task;
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
7
149
eb793fbbe4ea fixed promises cancellation
cin
parents: 144
diff changeset
8 public FuncTask(Func<T> task, Func<Exception, T> error, Func<Exception, T> cancel, bool autoCancellable) : base(error, cancel, autoCancellable) {
144
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
9 m_task = task;
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
10 }
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
11
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
12 public void Resolve() {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
13 if (m_task != null && LockCancelation()) {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
14 try {
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
15 SetResult(m_task());
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
16 } catch(Exception err) {
196
40d7fed4a09e fixed promise chaining behavior, the error handler doesn't handle result or cancellation handlers exceptions these exceptions are propagated to the next handlers.
cin
parents: 187
diff changeset
17 SetErrorInternal(err);
144
8c0b95069066 DRAFT: refactoring
cin
parents:
diff changeset
18 }
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