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