为什么全局执行上下文不是future块的默认参数?

6

当你编写一些高并发的代码时,使用Futures或Actors响应,手动导入ExecutionContext.Implicits.global真的很烦人。尝试找到一些好的解释为什么它不是默认参数,就像在Scalaz Concurrent中的Strategy一样done。这将非常有帮助,可以避免在代码中插入/删除所有这些导入。或者我错过了某些逻辑吗?

1个回答

10

总体趋势似乎是要求用户显式导入隐式、额外的运算符或DSL。我认为这是一件好事,因为它使事情不那么“神奇”,更容易理解。

但是,并没有阻止你为你的代码定义一个包范围的隐式值。请注意,如果隐式ExecutionContext总是默认导入的话,你就无法这样做。

在包对象中:

package object myawsomeconcurrencylibrary {
  implicit def defaultExecutionContext = scala.concurrent.ExecutionContext.global
}

在同一包中的任何类中:

package myawsomeconcurrencylibrary

object Bla {
  future { ... } // implicit from package object is used unless you explicitly provide your own
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接