我怎样才能打断Play中的实时作业!骨架

时间:2011-12-26 10:03:42

标签: multithreading playframework jobs

我试图在没有任何运气的情况下寻找某种功能来杀死/打断Play中的工作!框架。

我错过了什么吗?或者玩过!实际上没有添加此功能?

1 个答案:

答案 0 :(得分:1)

Java stop类中没有类似Thread方法的内容,因为有充分理由而被弃用。干净的方法是使用interrupted布尔值。如果您扩展play.jobs.Job,则可以轻松添加自己的interrupt方法,从而更改作业状态。你可以这样做:

ComputeBigPrime primeJob = new ComputeBigPrime();
Promise<Integer> promisedPrime = primeJob.now();

// Timeout for interrupt
await("10s");
primeJob.interrupt();

// Wait until it's really finished to get the result
Integer prime = await(promisedPrime);

render(prime);

如果你想在多个请求之间执行中断,你可以使用 play.cache.Cache并设置一个唯一的id(例如UUID)和信息,如果线程是是否中断。

当然这不起作用,如果你的工作挂在其他一些API调用中,你不能使用循环检查interrupted布尔值,但如果你真的需要做一个艰难的{{在stop 中{1}},您可以尝试在控制器或工作中使用Thread。因为它只是Java,它应该工作。