Проверьте, запущена ли задача, прежде чем запускать новую
Существует процесс, который выполняется в задаче. Я не хочу, чтобы один из них выполнялся одновременно.
Правильно ли это проверить, не запущена ли задача?
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
});
}
}
Ответы
Ответ 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(() =>
{
//??
}
}