2013-12-13 10 views
6

私はPlayについてどうか少し混乱しています!コントローラレイヤーで動作します。 Play!常に非同期で非ブロッキングです。ですから私はAction対Action.asyncと混同しています。アクションはブロックされていますか?もしそうなら、そしてDocsはあなたが常に非同期で非ブロッキングであるべきだと言っています。そして、あなたは常にあなたのすべてのコントローラでAction.asyncを使うべきですか?なぜあなたはあまり選んでいないでしょうか?私がここで理解していないことがあると確信しています。あなたの専門知識のどれかがこれを理解することで大きく評価されます。再生:常にAction.asyncを使用する必要がありますか?

答えて

5

再生は完全に非同期で非ブロックです。

ほとんどのアクションはインラインで実行する必要があり、Playはこれを便利に反映します。しかし、あなたのアクション内に非同期操作がある場合(例えばWSを呼び出す場合)、Action.asyncを使用して将来の結果を返すことができます。

1

Actionはブロックされており、Request=>Resultの機能が使用されていますので、ブロックすることができます。 Action.asyncはノンブロッキングであり、Request=>Future[Result]の機能が必要ですが、ここではノンブロッキングなものだけが重要であることを認識することが重要です。 @Christopher Huntが言及しているWS呼び出しは、戻り値の型としてAction.asyncが期待するものを容易にFuture[Result]に変換できるFuture [Response]を与えるため、良い例です。しかし、非同期の非同期の可能性のあるものにはscala.Future APIを自由に使用できます。&

関連する問題