Exemplo n.º 1
0
 private void Initialize()
 {
     if (Status != CancellableTaskStatus.Created || Task == null)
     {
         Task = null;
         cancellationTokenSource = new CancellationTokenSource();
         CancellationToken cancellationToken = cancellationTokenSource.Token;
         Action <object>   cancellableAction = new Action <object>((cancelled) =>
         {
             try
             {
                 action.Invoke(cancelled);
                 if (mustTerminate)
                 {
                     Status = CancellableTaskStatus.Terminated;
                 }
                 else
                 {
                     Status = CancellableTaskStatus.Stopped;
                 }
             }
             catch (Exception ex)
             {
                 Status    = CancellableTaskStatus.Faulted;
                 Exception = ex;
             }
         });
         Task = new Task(cancellableAction, cancellationToken);
     }
 }
Exemplo n.º 2
0
        public void Start()
        {
            lock (taskLock)
                switch (Status)
                {
                case CancellableTaskStatus.Created:
                case CancellableTaskStatus.Faulted:
                case CancellableTaskStatus.Stopped:
                    Initialize();
                    Task.Start();
                    Status = CancellableTaskStatus.Started;
                    break;

                case CancellableTaskStatus.Started:
                    Log.Write($"Task '{TaskOwner}' already running!");
                    break;

                case CancellableTaskStatus.Terminated:
                    Log.Write(new NotImplementedException($"Terminated task '{TaskOwner}' cannot be restarted!"), string.Empty);
                    break;
                }
        }