我有这样的特点
trait NonBlockingGoodness extends DataStore {
import akka.dispatch.{ Future, ExecutionContext }
import akka.util.duration._
import akka.util.Timeout
implicit val ec = ExecutionContext.fromExecutorService(yourExecutorServiceGoesHere)
implicit lazy val timeout = Timeout(5 seconds)
}我想以这样的另一个特性访问ExecutionContext
trait AsyncGoodness extends NonBlockingGoodness {
import akka.dispatch.Future
def doSomething = {
Future { "Future is the bomb." }
}但是,我得到了错误。
Could not find implicit value for parameter executor: akka.dispatch.ExecutionContext更新:我想出了如何在范围内获取ExecutionContext
trait AsyncGoodness extends NonBlockingGoodness {
import akka.dispatch.ExecutionContext
import akka.dispatch.Future
def doSomething()(implicit executor: ExecutionContext) = {
Future { "Future is the bomb." }
}不过,我还有个后续问题。由于在AsyncGoodness中可能有多个使用ExecutionContext的方法,是否有一种方法可以在trait级别传递它,而不是像上面那样在每个方法上传递它。
发布于 2012-10-22 23:31:43
事实证明,我所需要做的就是显式指定ec返回类型,供编译器使用。这是工作代码
trait NonBlockingGoodness extends DataStore {
import akka.dispatch.{ Future, ExecutionContext }
import akka.util.duration._
import akka.util.Timeout
implicit val ec: ExecutionContext = ExecutionContext.fromExecutorService(yourExecutorServiceGoesHere)
implicit lazy val timeout = Timeout(5 seconds)
}
trait AsyncGoodness extends NonBlockingGoodness {
import akka.dispatch.Future
def doSomething = {
Future { "Future is the bomb." }
}发布于 2012-10-22 03:57:25
我知道你不想进口任何额外的东西,但是像这样的东西应该适合你。
trait NonBlockingGoodness {
import scala.concurrent.{ Future, ExecutionContext }
import scala.concurrent.util.duration._
import akka.util.Timeout
object Implicit {
implicit val ec = ExecutionContext.Implicits.global
implicit lazy val timeout = Timeout(5 seconds)
}
}
trait AsyncGoodness extends NonBlockingGoodness {
import scala.concurrent.Future
import Implicit._
def doSomething = {
Future { "Future is the bomb." }
}
}https://stackoverflow.com/questions/13001381
复制相似问题