除了Scala提供的未来执行上下文之外:
import scala.concurrent.ExecutionContext.Implicits.global
Play提供了另一个执行上下文:
import play.api.libs.concurrent.Execution.Implicits.defaultContext
何时在Play for Scala中使用每个?
答案 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
并且不希望调用者/创建者控制效果的评估位置。