有一個過程在任務中執行。我不想讓其中的一個以上同時執行。檢查任務是否已在運行之前開始新的
這是檢查任務是否已在運行的正確方法嗎?
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
});
}
}
建議使用'Task.IsCompleted' - 但是記住,總會有這裏的競爭條件的熊。如果任務在你檢查完成後*就完成了,你不會再運行它 - 那沒問題?或者你真的*想在第一個任務結束後立即開始第二項任務? –
啊,我沒有看到'Task.IsComplete'。是的,競賽條件不成問題。謝謝,隨時創建一個答案。 – davenewza
@davenewza,你可能想看看[自我取消和重新啓動任務模式](http://stackoverflow.com/questions/18999827/a-pattern-for-self-cancelling-and-restarting-task) – Noseratio