annotate Implab/ActionTaskT.cs @ 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.
author cin
date Mon, 29 Aug 2016 23:15:51 +0300
parents dd4a3590f9c6
children
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 ActionTask<T> : ActionTaskBase, IDeferred<T> {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
5 readonly Action<T> m_task;
149
eb793fbbe4ea fixed promises cancellation
cin
parents: 145
diff changeset
6 public ActionTask(Action<T> task, Action<Exception> error, Action<Exception> cancel, bool autoCancellable) : base(error,cancel, autoCancellable) {
145
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
7 m_task = task;
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
8 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
9
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
10 public void Resolve(T value) {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
11 if (m_task != null && LockCancelation()) {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
12 try {
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
13 m_task(value);
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
14 SetResult();
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
15 } 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
16 SetErrorInternal(err);
145
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
17 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
18 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
19 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
20 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
21 }
706fccb85524 RC: cancellation support for promises + tests
cin
parents:
diff changeset
22