public TaskRunner Start() { if (_task == null) { var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var task = new Task(() => { while (LoopCondition()) { if (token.IsCancellationRequested) { return; } LoopAction(); } _done = true; }, tokenSource.Token); if (_first) { OnFirstStarting(); _first = false; } OnStarting(); _task = new TokenedTask(task, token, tokenSource); _task.Task.Start(); } RemoveWaiter(); return(this); }
public TaskRunner Start() { if (_task == null) { var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var task = new Task(() => { while (LoopCondition()) { if (token.IsCancellationRequested) { return; } LoopAction(); } _done = true; }, tokenSource.Token); if(_first) { OnFirstStarting(); _first = false; } OnStarting(); _task = new TokenedTask(task, token, tokenSource); _task.Task.Start(); } RemoveWaiter(); return this; }
public TaskRunner Wait() { while (!_done) { if (_task == null && _waiter == null) { _waiter = CreateWaiter(); _waiter.Task.Wait(); } else { _task.Task.Wait(); if (_pausing && LoopCondition()) { OnPaused(); } _pausing = false; } } return this; }
private void RemoveWaiter() { if (_waiter != null) { _waiter.TokenSource.Cancel(); _waiter = null; } }
private void CancelTask() { if (_task != null) { _task.TokenSource.Cancel(); _task = null; } }