Mercurial > pub > ImplabNet
annotate Implab/ActionTaskBase.cs @ 216:1e082fb67a46 v2
Fixed component container
| author | cin | 
|---|---|
| date | Tue, 25 Apr 2017 19:51:33 +0300 | 
| parents | 40d7fed4a09e | 
| children | 
| rev | line source | 
|---|---|
| 145 | 1 using System; | 
| 2 | |
| 3 namespace Implab { | |
| 
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
 | 
4 public class ActionTaskBase : AbstractTask { | 
| 145 | 5 readonly Action<Exception> m_cancel; | 
| 6 readonly Action<Exception> m_error; | |
| 7 | |
| 149 | 8 protected ActionTaskBase( Action<Exception> error, Action<Exception> cancel, bool autoCancellable) { | 
| 145 | 9 m_error = error; | 
| 10 m_cancel = cancel; | |
| 149 | 11 if (autoCancellable) | 
| 12 CancellationRequested(CancelOperation); | |
| 145 | 13 } | 
| 14 | |
| 15 public void Reject(Exception error) { | |
| 16 Safe.ArgumentNotNull(error, "error"); | |
| 17 if (LockCancelation()) | |
| 18 HandleErrorInternal(error); | |
| 19 } | |
| 20 | |
| 
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
 | 
21 public override void CancelOperation(Exception 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
 | 
22 if (LockCancelation()) | 
| 
 
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
 | 
23 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
 | 
24 } | 
| 
 
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
 | 
25 | 
| 145 | 26 protected void HandleErrorInternal(Exception error) { | 
| 27 if (m_error != null) { | |
| 28 try { | |
| 29 m_error(error); | |
| 30 SetResult(); | |
| 31 } catch(Exception err) { | |
| 
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
 | 
32 SetErrorInternal(err); | 
| 145 | 33 } | 
| 34 } else { | |
| 
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
 | 
35 SetErrorInternal(error); | 
| 145 | 36 } | 
| 37 } | |
| 38 | |
| 
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
 | 
39 protected void HandleCancelInternal(Exception error) { | 
| 
 
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
 | 
40 if (m_cancel != null) { | 
| 
 
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
 | 
41 try { | 
| 
 
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
 | 
42 m_cancel(error); | 
| 
 
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
 | 
43 SetResult(); | 
| 
 
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
 | 
44 } 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
 | 
45 SetErrorInternal(err); | 
| 145 | 46 } | 
| 
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
 | 
47 } else { | 
| 
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
 | 
48 SetCancelledInternal(error); | 
| 145 | 49 } | 
| 50 } | |
| 51 } | |
| 52 } | |
| 53 | 
