【问题标题】:Difference between using scala global execution context usage by implicit vs import way通过隐式与导入方式使用 scala 全局执行上下文使用之间的区别
【发布时间】:2022-01-02 18:18:41
【问题描述】:
import scala.concurrent.ExecutionContext.Implicits.global

class A () {
  implicit val ec: ExecutionContextExecutor = ExecutionContext.global
}

大家好,这两种使用 scala 全局执行上下文的方式有什么区别。

【问题讨论】:

  • 不,Implicits 对象就是这样做的。

标签: scala implicit


【解决方案1】:

在给定的范围内之间没有区别

import scala.concurrent.ExecutionContext.Implicits.global

implicit val ec: ExecutionContext = ExecutionContext.global

然而,顶级importclass/object 中的implicit val 之间存在区别:如果在文件中定义多个类/对象,import 将适用于所有其中,implicit val 仅适用于包含的类/对象。

【讨论】:

    【解决方案2】:

    其实不一样,要看implicits的范围。如果你的隐式是全局的,那么第一个选项是有效的,但如果范围在类内,那么第二个选项是要走的路。我建议您将它们导入您非常确定要使用它们的地方,以避免将来出现碰撞问题。

    如果您查看类 ExecutionContextdocumentation,它会显示以下内容:

    虽然可以简单地导入 scala.concurrent.ExecutionContext.Implicits.global 来获取隐式 ExecutionContext,但应用程序开发人员应该仔细考虑他们想要在哪里设置执行策略;理想情况下,每个应用程序(或每个逻辑相关的代码部分)一个地方将决定使用哪个 ExecutionContext。也就是说,您最希望避免硬编码,尤其是通过导入 scala.concurrent.ExecutionContext.Implicits.global。 推荐的方法是在需要 ExecutionContext 的方法或类构造函数参数中添加(隐式 ec:ExecutionContext)。

    【讨论】:

    • 虽然你所说的都是真实和重要的,但这并不能回答问题。
    猜你喜欢
    • 2021-03-23
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多