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 already running?
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
});
}
}
Even easier:
As suggested by Jon Skeet, the
Task.IsCompleted
is the better option.According to MSDN:
But it appears to return true in the
TaskStatus.WaitingForActivation
state too.You can check it with: