【发布时间】:2013-10-05 11:39:00
【问题描述】:
有一个进程在一个任务中执行。我不希望同时执行其中一个以上。
这是检查任务是否已在运行的正确方法吗?
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,你可能想看看A pattern for self-cancelling and restarting task
标签: c# .net parallel-processing task-parallel-library