Asynchronous 播放框架异步控制器

Asynchronous 播放框架异步控制器,asynchronous,playframework-2.3,Asynchronous,Playframework 2.3,我在播放异步请求处理方面遇到问题。出于测试目的,我编写了以下控制器方法。当我向asyncSleep发出4个后续请求时,我的play实例将被阻止,直到其中一个asyncSleep请求返回 public static Promise<Result> asyncSleep() { Promise<Integer> promiseOfInt = Promise.promise(new Function0<Integer>() { public Int

我在播放异步请求处理方面遇到问题。出于测试目的,我编写了以下控制器方法。当我向asyncSleep发出4个后续请求时,我的play实例将被阻止,直到其中一个asyncSleep请求返回

public static Promise<Result> asyncSleep() {
   Promise<Integer> promiseOfInt = Promise.promise(new Function0<Integer>() {
      public Integer apply() {
         try {
            Thread.sleep(60000L);
         } catch(Exception e) {
            e.printStackTrace();
         }
         return 9;
       }
    });
    return promiseOfInt.map(new Function<Integer, Result>() {
        public Result apply(Integer i) {
            return ok("asyncSleep ok " + System.currentTimeMillis());
        }
    });
}
公共静态承诺异步睡眠(){
promiseOfInt=Promise.Promise(新函数0(){
公共整数apply(){
试一试{
线程睡眠(60000L);
}捕获(例外e){
e、 printStackTrace();
}
返回9;
}
});
返回promiseOfInt.map(新函数(){
公共结果应用(整数i){
返回ok(“asyncSleep ok”+System.currentTimeMillis());
}
});
}

我做错什么了吗?

您是在开发模式下做的吗?因为Play以开发模式串行处理请求。睡眠意味着您仍在使用cpu进行阻塞。我认为这也可能与scala如何实现承诺和未来有关。文档中说“如果某些回调从未完成(例如回调包含无限循环),则其他回调可能根本不会执行。在这些情况下,潜在阻塞回调必须使用阻塞构造(请参见下文)”read more@您提供了哪个executioncontext?