Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
 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;
 }
Example #4
0
 private void RemoveWaiter()
 {
     if (_waiter != null)
     {
         _waiter.TokenSource.Cancel();
         _waiter = null;
     }
 }
Example #5
0
 private void CancelTask()
 {
     if (_task != null)
     {
         _task.TokenSource.Cancel();
         _task = null;
     }
 }