有一个过程在任务中执行。我不想让其中的一个以上同时执行。检查任务是否已在运行之前开始新的
这是检查任务是否已在运行的正确方法吗?
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