Mercurial > pub > ImplabNet
view Implab/AbstractTaskT.cs @ 208:7d07503621fe v2
RunnableComponent.Dispose(bool,Exception) changed to standart Dispose(bool)
IRunnable is now disposable
Code cleanups, suppressed some CodeAnalysis warnings
author | cin |
---|---|
date | Sun, 13 Nov 2016 18:28:17 +0300 |
parents | dd4a3590f9c6 |
children |
line wrap: on
line source
using System; using System.Threading; namespace Implab { public abstract class AbstractTask<T> : AbstractPromise<T> { int m_cancelationLock; /// <summary> /// Получает эксклюзивное право отмены задания, используется для отмены задания до начала его выполнения. /// </summary> /// <returns><c>true</c>, if cancelation was locked, <c>false</c> otherwise.</returns> protected bool LockCancelation() { return 0 == Interlocked.CompareExchange(ref m_cancelationLock, 1, 0); } protected void SetErrorInternal(Exception error) { // unwrap while (error is PromiseTransientException && error.InnerException != null) error = error.InnerException; if (error is OperationCanceledException) SetCancelled(error); else SetError(error); } protected void SetCancelledInternal(Exception reason) { SetCancelled( reason == null ? new OperationCanceledException() : reason is OperationCanceledException ? reason : new OperationCanceledException(null, reason) ); } } }