我不止一个Future
。
val actor1 : Future[ActorRef] = createActorA()
val actor2 : Future[ActorRef] = createActorB()
...
...
...
现在我需要从所有这些未来中提取ActorRef
,以便我可以使用它们来创建Router
。
val routees = Vector[ActorRef](actor1, actor2, .....)
val router = system.actorOf(Props.empty.withRouter(
RoundRobinRouter(routees = routees)))
我可以在每个Await
上致电Future
以获取ActorRef
。有更好的方法吗?
答案 0 :(得分:3)
将Future.sequence
与foreach
:
Future.sequence(Vector(
createActorA(),
createActorB() // and so on
)) foreach { routees =>
val router = system.actorOf(Props.empty.withRouter(
RoundRobinRouter(routees = routees)))
// do something with router
}
Future.sequence
收集一系列期货,并返回一个包含这些期货结果的集合的未来,在这种情况下,它会返回Future[Vector[ActorRef]]
。然后,我们在此未来调用foreach
以附加处理程序以完成此未来。这使我们可以访问集合(routees
)并创建所需的路由器。我们可以继续在传递给foreach的函数中进行进一步处理。
答案 1 :(得分:0)
你可以使用for-comprehension。
val actors: Future[(ActorRef, ActorRef)] = for {
a <- createActorA()
b <- createActorB()
} yield (a -> b)
// Await on actors