Mercurial > pub > ImplabNet
diff Implab/Components/RunnableComponent.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 | 75103928da09 |
children | 40d7fed4a09e |
line wrap: on
line diff
--- a/Implab/Components/RunnableComponent.cs Tue Apr 19 00:50:14 2016 +0300 +++ b/Implab/Components/RunnableComponent.cs Tue Apr 19 17:35:20 2016 +0300 @@ -137,10 +137,6 @@ } } throw new PromiseTransientException(e); - }, - r => { - // handle cancellation as exception - throw new OperationCanceledException("The operation has been cancelled", r); } ); @@ -194,7 +190,13 @@ if (current == null) { stop.Resolve(); } else { - current.On(stop.Resolve, stop.Reject, e => stop.Resolve()); + // связваем текущую операцию с операцией остановки + current.On( + stop.Resolve, // если текущая операция заверщилась, то можно начинать остановку + stop.Reject, // если текущая операция дала ошибку - то все плохо, нельзя продолжать + e => stop.Resolve() // если текущая отменилась, то можно начинать остановку + ); + // посылаем текущей операции сигнал остановки current.Cancel(); } }