1

我正在使用 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 框架都很陌生,所以我愿意接受建议。谢谢

4

0 回答 0