Подтвердить что ты не робот

Проверьте, запущена ли задача, прежде чем запускать новую

Существует процесс, который выполняется в задаче. Я не хочу, чтобы один из них выполнялся одновременно.

Правильно ли это проверить, не запущена ли задача?

private Task task;

public void StartTask()
{
    if (task != null && (task.Status == TaskStatus.Running || task.Status == TaskStatus.WaitingToRun || task.Status == TaskStatus.WaitingForActivation))
    {
        Logger.Log("Task has attempted to start while already running");
    }
    else
    {
        Logger.Log("Task has began");

        task = Task.Factory.StartNew(() =>
        {
            // Stuff                
        });
    }
}
4b9b3361

Ответ 1

Как предложил Джон Скит, Task.IsCompleted - лучший вариант.

Согласно MSDN:

IsCompleted вернет true, когда задача находится в одном из трех конечные состояния: RanToCompletion, Faulted или Canceled.

Но он также возвращает true в состоянии TaskStatus.WaitingForActivation.

Ответ 2

private Task task;

public void StartTask()
{
    if ((task != null) && (task.IsCompleted == false ||
                           task.Status == TaskStatus.Running ||
                           task.Status == TaskStatus.WaitingToRun ||
                           task.Status == TaskStatus.WaitingForActivation))
    {
        Logger.Log("Task is already running");
    }
    else
    {
        task = Task.Factory.StartNew(() =>
        {
            Logger.Log("Task has been started");
            // Do other things here               
        });
    }
}

Ответ 3

Вы можете проверить это с помощью:

if ((taskX == null) || (taskX.IsCompleted))
{
   // start Task
   taskX.Start();
   //or
   taskX = task.Factory.StartNew(() =>
   {
      //??
   }
}