我正在尝试了解异步操作如何在Play中运行。 文档告诉我们“Play以异步,非阻塞的方式处理每个请求”。假设我们在Application控制器中有这样的示例操作:
def index = Action.async {
Future {
blocking{
println("start at " + (new DateTime).toString("MM-dd-yyyy HH:mm:ss"))
Thread.sleep(10000) // 10 seconds
println("end at " + (new DateTime).toString("MM-dd-yyyy HH:mm:ss"))
Ok("Done")
}
}
}
我制作“激活器运行”,然后在浏览器中打开两个选项卡,并在每个选项卡中发出请求。 在我的控制台中,我看到这样的事情:
start at 09-11-2015 18:33:34
end at 09-11-2015 18:33:44
start at 09-11-2015 18:33:44
end at 09-11-2015 18:33:54
因此,我的第二个请求的处理仅在第一个请求处理结束后才开始。
我已尝试按this article中所述配置线程池,但结果未更改。
为什么Play按顺序而不是并行处理我的请求?