2017-03-28 2 views

答えて

2

あなたはここで答えを見つけることができます。

Play's internal execution context

をその質問には完全な複製が、非常に近接していない、とそこに答えは同様にあなたの質問をカバーしています。要するに

あなたはプレイ中import scala.concurrent.ExecutionContext.Implicits.globalを使用してはなりません。

応答引用

コメントへの回答から:

代わりに、あなたは がActorSystemを使用する、 play.api.libs.concurrent.Execution.Implicits.defaultContextを使用します。

scala.concurrent.ExecutionContext.Implicits.globalは、Scala標準ライブラリで定義されている ExecutionContextです。 特別なForkJoinPoolは、ブロックメソッドを使用して、プール内に新しいスレッドを生成するために潜在的にブロックコードである を処理することがあります。 Playアプリケーションではこれを使用しないでください。これは、Playが を制御しないためです。また、多くの スレッドを生成し、慎重でない場合は、1トンのメモリを使用する可能性があります。

+0

私がこのリンクから理解していることは、PlayのコンテキストはPlayの内部で使用されているため、使用しないことです。したがって、私はScalaの実行コンテキスト(あなたが私に言っている答えではありません)を使用するべきです。 – ps0604

+0

更新を見てください、私はあなたがそれをどう違って理解するのか分かりません –

0

通常、メソッドまたはクラスの内部にExecutionContextが必要な場合は、それを暗黙のパラメータ(Scala)または通常のパラメータ(Java)として指定する必要があります。条約はこのパラメータを最後に置くことです。

このルールは、呼び出し元/作成者が非同期効果が評価される場所/方法/時期を制御できるようにします。

このルールの主な例外は、すでにExecutionContextがあり、呼び出し元/作成者がエフェクトの評価先を制御したくない場合です。

関連する問題