public override void Start(CancellationToken cancellationToken) { base.Start(cancellationToken); cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); stopPending = false; try { Run(cancellationTokenSource.Token); } catch (OperationCanceledException) { } catch (AggregateException ae) { ae.FlattenAndHandle(new[] { typeof(OperationCanceledException) }, e => OnExceptionOccurred(e)); } catch (Exception e) { OnExceptionOccurred(e); } cancellationTokenSource.Dispose(); cancellationTokenSource = null; if (stopPending) { ExecutionStack.Clear(); } if (stopPending || !CanContinue) { OnStopped(); } else { OnPaused(); } }
public virtual void Step(bool skipStackOperations) { OnStarted(); cancellationTokenSource = new CancellationTokenSource(); stopPending = false; lastUpdateTime = DateTime.UtcNow; timer.Start(); try { ProcessNextOperation(true, cancellationTokenSource.Token); while (skipStackOperations && !(CurrentOperation is IAtomicOperation) && CanContinue) { ProcessNextOperation(true, cancellationTokenSource.Token); } } catch (Exception ex) { OnExceptionOccurred(ex); } timer.Stop(); ExecutionTime += DateTime.UtcNow - lastUpdateTime; cancellationTokenSource.Dispose(); cancellationTokenSource = null; if (stopPending) { ExecutionStack.Clear(); } if (stopPending || !CanContinue) { OnStopped(); } else { OnPaused(); } }
public sealed override void Prepare() { base.Prepare(); ExecutionStack.Clear(); CurrentOperation = null; OperatorTrace.Reset(); OnPrepared(); }
public void Prepare(IOperation initialOperation) { base.Prepare(); ExecutionStack.Clear(); if (initialOperation != null) ExecutionStack.Add(initialOperation); CurrentOperation = null; OperatorTrace.Reset(); OnPrepared(); }
public override void Stop() { CurrentOperation = null; base.Stop(); if (ExecutionState == ExecutionState.Paused) { ExecutionStack.Clear(); OnStopped(); } else { stopPending = true; cancellationTokenSource.Cancel(); } }
public override void Start() { base.Start(); cancellationTokenSource = new CancellationTokenSource(); stopPending = false; Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token); task.ContinueWith(t => { try { t.Wait(); } catch (AggregateException ex) { try { ex.Flatten().Handle(x => x is OperationCanceledException); } catch (AggregateException remaining) { if (remaining.InnerExceptions.Count == 1) { OnExceptionOccurred(remaining.InnerExceptions[0]); } else { OnExceptionOccurred(remaining); } } } cancellationTokenSource.Dispose(); cancellationTokenSource = null; if (stopPending) { ExecutionStack.Clear(); } if (stopPending || !CanContinue) { OnStopped(); } else { OnPaused(); } }); }