在Akka直接使用期货

tgr*_*tgr 2 scala future akka

我无法按照此处的说明创建未来.它表示您可以Future使用以下代码直接创建:

import akka.dispatch.Await
import akka.dispatch.Future
import akka.util.duration._

val future  = Future {
  "Hello" + "World"
}
val result = Await.result(future, 1 second)
Run Code Online (Sandbox Code Playgroud)

使用完全相同的代码,我得到一个错误消息,说:error: could not find implicit value for parameter executor: akka.dispatch.ExecutionContext.所有我能找到的ExecutionContext就是,你可以用它"做事".在文档中,我发现的唯一一行是:

implicit val ec = ExecutionContect.fromExecutionService(yourExecutionServiceGoesHere)
Run Code Online (Sandbox Code Playgroud)

但这对我没用.有人对我这个话题有什么建议吗?如何在Future不询问的情况下创建新的Actor

Ben*_*mes 7

如果你有一个ActorSystem那么它将有一个ExecutionContext可以在这里使用.它必须是implicit,除非你明确地将它传递给Future.apply方法.

出于演示的目的,如果您只想查看它在REPL中的工作原理:

implicit val system = ActorSystem("MySystem").dispatcher
Run Code Online (Sandbox Code Playgroud)

(对象ActorSystem => ExecutionContext上还有一个隐式转换ExecutionContext.)

要创建模块化代码,而不在使用点之前创建上下文,请考虑使上下文成为特征的抽象成员:

trait MyFutures {
  implicit val context: ExecutionContext

  def helloFuture: Future[String] = Future { "hello" + "world" }
}
Run Code Online (Sandbox Code Playgroud)