2012-07-27 63 views
1

最近我一直注意到,当我重新安排延期任务时,任务会产生两个或两个以上完全相同的任务。我刚刚完成了一项工作,生成了4个相同的任务。我们使用如下代码重新安排任务:谷歌App Engine添加延迟任务队列产生多个任务

Queue q = null; 
if (queueName == null) 
    q = QueueFactory.getDefaultQueue(); 
else 
    q = QueueFactory.getQueue(queueName); 

TaskOptions to = TaskOptions.Builder.withPayload(this); 
q.add(to); 

这段代码很简单,但它造成了很多的我们的应用程序的问题。我们甚至试图给任务一个名字,例如:

to.taskName(TASK_NAME); 

防止重复的任务从产卵没有用。有没有其他人看到这个问题或有一个解决方案,以防止重复。

+1

为什么重新安排延期任务?如果您在任务处理程序中这样做,则可以创建多个任务,因为可以多次运行同一个任务。 – mjibson 2012-07-27 20:57:46

+0

为什么你会为什么我重新安排一个例子。假设我正在处理用户的任务文档。该任务正在Frontend实例上运行,因此我必须遵守10分钟计时器。为了保持当前任务的状态,我需要重新安排该任务,以便在接近时间限制时完成其工作。 – ndixon 2012-07-28 23:17:11

回答

0

任务队列可以多次执行相同的任务。这是预期的行为。

您的任务必须是幂等的,才能使用任务队列。即如果它多次运行,它必须像运行一次那样运行。否则,您不能使用任务队列。