在Play for Scala中定义未来的隐式上下文

时间:2017-03-28 09:30:30

标签: scala playframework

除了Scala提供的未来执行上下文之外:

import scala.concurrent.ExecutionContext.Implicits.global

Play提供了另一个执行上下文:

import play.api.libs.concurrent.Execution.Implicits.defaultContext

何时在Play for Scala中使用每个?

2 个答案:

答案 0 :(得分:2)

你可以在这里找到答案:

Play's internal execution context

这个问题不是完全重复,而是非常接近,答案也包括你的问题。

简而言之:

您不得在Play中使用import scala.concurrent.ExecutionContext.Implicits.global

对评论的回复

答案的引用:

  

相反,你会使用   play.api.libs.concurrent.Execution.Implicits.defaultContext,哪个   使用ActorSystem

     

scala.concurrent.ExecutionContext.Implicits.global是一个   Scala标准库中定义的ExecutionContext。它是一个   使用阻塞方法处理的特殊ForkJoinPool   可能阻塞代码以便在池中生成新线程。   你真的不应该像Play那样在Play应用程序中使用它   无法控制它。它也有可能产生很多   线程并使用大量内存,如果你不小心。

答案 1 :(得分:0)

作为一般规则,如果在方法或类中需要ExecutionContext,则需要将其作为隐式参数(Scala)或普通参数(Java)。惯例是将此参数放在最后。

此规则允许调用者/创建者控制评估异步效果的位置/方式/时间。

此规则的主要例外情况是,您已经拥有ExecutionContext并且不希望调用者/创建者控制效果的评估位置。