我正在使用 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
)
从我在文档中阅读的内容来看,您不能在执行过程中干扰演员,也就是说,我无法在执行 IO 过程中或在 longRunningComputation 过程中取消上面的链。是否可以取消链接调用之间的整个操作?也就是说,如果用户发出取消请求,我是否可以设置一个标志,操作可以检查以基本上变成无操作并返回空结果?还有其他推荐的方法来取消长时间运行的服务请求吗?
我对 Play 和底层 Akka 框架都很陌生,所以我愿意接受建议。谢谢