2013-08-18 99 views
1

我试图以编程方式停止PlayFramework中正在运行的作业。当作业运行时,我保存它启动时返回的'Promise'对象。这个对象有一个'取消'方法,应该取消一个预定的工作或停止一个现有的工作,但它似乎没有做任何事情。以编程方式停止PlayFramework作业

还有什么其他方式可以阻止正在运行的Job?

回答

1

我认为你需要自己实施有序的取消。 cancel不会仅仅结束线程的执行,因为这可能会导致不希望的结果。该解决方案与Thread.stop()不推荐使用,Thread.interrupt()应该使用相似。

检查工作是否有时被取消。如果在循环中运行繁重的计算,请检查它是否应该在开始时继续运行。你甚至可以用这种方式返回部分结果。

+0

问题是PlayFramework中的'作业'本身不是一个线程,我需要从它正在运行的线程的外部中断它。我不想实现'检查它是否应该运行'模式类型,因为如果它出于某种原因被卡在循环中,它可能不会退出。中断异常会在那里获得更多的成功。 – Iv4n

+0

@ Iv4n你正在使用什么工作和未来/承诺实现?对于java,scala,play1,play2和akka,有很多不同的东西。如果您使用的是Play 2.x版本,那么如果您担心陷入循环,应该有一些方法可以在超时运行期货。 – Kapep

+0

我使用Play 1.x - 仅限Java。 – Iv4n

相关问题