Check if task is already running before starting new

前端 未结 4 1583
旧时难觅i
旧时难觅i 2020-12-29 02:32

There is a process which is executed in a task. I do not want more than one of these to execute simultaneously.

Is this the correct way to check to see if a task is

相关标签:
4条回答
  • 2020-12-29 03:03

    You can check it with:

    if ((taskX == null) || (taskX.IsCompleted))
    {
       // start Task
       taskX.Start();
       //or
       taskX = task.Factory.StartNew(() =>
       {
          //??
       }
    }
    
    0 讨论(0)
  • 2020-12-29 03:10
    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               
            });
        }
    }
    
    0 讨论(0)
  • 2020-12-29 03:15

    As suggested by Jon Skeet, the Task.IsCompleted is the better option.

    According to MSDN:

    IsCompleted will return true when the task is in one of the three final states: RanToCompletion, Faulted, or Canceled.

    But it appears to return true in the TaskStatus.WaitingForActivation state too.

    0 讨论(0)
  • 2020-12-29 03:21

    Even easier:

    if (task?.IsCompleted ?? true)
        task = TaskFunction();
    
    0 讨论(0)
提交回复
热议问题