通过隐式和导入方式使用scala全局执行上下文之间的区别


import scala.concurrent.ExecutionContext.Implicits.global
class A () {
  implicit val ec: ExecutionContextExecutor = ExecutionContext.global
}

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

在给定范围内,之间没有差异

import scala.concurrent.ExecutionContext.Implicits.global

implicit val ec: ExecutionContext = ExecutionContext.global

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

实际上并不相同,这取决于隐词的范围。如果你的隐式是全局的,那么第一个选项是有效的,但如果作用域在类内,那么第二个选项是可行的。我建议您将它们导入到您非常确定要使用它们的地方,以避免将来出现碰撞问题。

如果您查看类ExecutionContext的文档,它会显示以下内容:

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

最新更新