玩:你应该总是使用Action.async吗?

时间:2013-12-13 23:37:27

标签: playframework-2.0

我对Play如何有点困惑!在其控制器层中工作。一些文档说明Play!始终是异步和非阻塞的。所以我对Action vs Action.async感到困惑。动作阻止了吗?如果是这样,并且docs说你应该始终保持异步和非阻塞,那么你应该总是在所有控制器中使用Action.async吗?你为什么不选择呢?我确信这里有一些我不理解的东西,理解这一点会非常感谢你的任何专业知识。

2 个答案:

答案 0 :(得分:5)

Play完全异步且无阻塞。

大多数操作都需要内联执行,因此Play方便地反映了这一点。但是,如果在操作中有异步操作(例如,调用WS),则使用Action.async传回未来的结果。

答案 1 :(得分:1)

Action正在阻止,它需要来自Request=>Result的函数,因此您可以在其中执行任何阻止。 Action.async是非阻塞的,需要来自Request=>Future[Result]的函数,但重要的是要认识到只有非阻塞的东西才有意义,因为如果你阻止某些东西,那么它将毫无意义。 @Christopher Hunt提到的WS调用是一个很好的例子,因为它为您提供了一个Future [Response],您可以轻松地将Action.async作为返回类型转换为Future[Result]。但您可以scala.Future API使用任何可能是异步和异步的内容。无阻塞。