【问题标题】:Defining the future implicit context in Play for Scala在 Play for Scala 中定义未来的隐式上下文
【发布时间】:2017-03-28 22:41:07
【问题描述】:

除了Scala提供的future的执行上下文:

import scala.concurrent.ExecutionContext.Implicits.global

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

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

什么时候在 Play for Scala 中使用每个?

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    你可以在这里找到答案:

    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 是一个 ExecutionContext 在 Scala 标准库中定义。它是一个 特殊的ForkJoinPool,使用阻塞的方法来处理 可能会阻塞代码以在池中生成新线程。 你真的不应该在 Play 应用程序中使用它,因为 Play 会有 无法控制它。它也有可能产生大量 线程并使用大量内存,如果你不小心的话。

    【讨论】:

    • 我从链接中了解到,Play 的上下文在 Play 内部使用,不应使用。因此,我应该使用 Scala 的执行上下文(不是你告诉我的答案)
    • 请看更新,我不知道你为什么理解不同
    【解决方案2】:

    作为一般规则,如果您需要在方法或类中使用ExecutionContext,请将其作为隐式参数 (Scala) 或普通参数 (Java)。约定是把这个参数放在最后。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多