我正在使用Play2(使用Java)编写一个运行计算成本相当高的操作的Web服务。根据文档,我将这个过程分解为一系列类似的承诺:
// Do some IO stuff on a background thread
Promise<ExtractionResult> extractDataPromise = Akka.future(new Callable<ExtractionResult>(){
@Override
public ExtractionResult call() throws Exception {
return null;
}
});
// Perform a couple computations based on the result
Promise<MyResult> longRunningComputation1 = extractDataPromise.map(
new Function<ExtractionResult, MyResult>(){
public MyResult apply(ExtractionResult er){
return longRunningComputation();
}
}
)
Promise<MyResult> longRunningComputation2 = extractDataPromise.map(
new Function<ExtractionResult, Result>(){
public Result apply(ExtractionResult er){
return longRunningComputation();
}
}
)
// Synchronize back up to make the result
Promise.sequence(longRunningComputation1, longRunningComputation2).flatMap(
// Do something with the results
)
从我在文档中看到的内容,你不能在执行过程中阻止一个actor,也就是说,我无法在执行IO或在longRunningComputation中间取消上面的链。是否有可能取消链式呼叫之间的整个操作?也就是说,如果用户发出了取消请求,我是否可以设置一个操作可以检查的标志,实际上是无操作并返回null结果?是否有其他推荐的方法来取消长时间运行的服务请求?
我对Play和底层的Akka框架都很新,所以我愿意接受建议。感谢