我有一个演员向三个演员发送消息,并等待所有三个演员的回应才能继续.
actor返回表单的数据类型:List [(String,Double,String)].
我希望它们都根据Tuple3的Double值进行排序.
actor返回表单的数据类型:List [(String,Double,String)].
我希望它们都根据Tuple3的Double值进行排序.
到目前为止,我编写的代码是:
implicit val timeout = Timeout(5.seconds) val x = actorOne ? "hey" val y = actorTwo ? "you" val z = actorThree ? "there" val answer = for{ a <- x.mapTo[List[(String,String)]] b <- y.mapTo[List[(String,String)]] c <- z.mapTo[List[(String,String)]] } yield a ++ a ++ a sortBy(_._2)
我如何确保演员不会继续进行,直到所有三个演员都做出回应?
谢谢
解决方法
只有在对a,b和c进行评估后才能评估您的理解能力,因此您无需在那里做任何事情.如果你的意思是你有一些后来依赖于答案的价值,那么你可以把它放在onComplete中:
answer.onComplete { case Success(x) => // do something on success case Failure(ex) => // report failure }
您可以使用Promise在合适的时间与结果进行交互.例如.如果你的外部方法应该返回Future [Boolean],你可以这样做:
def myFunction():Future[Boolean] = { val p = Promise[Boolean] implicit val timeout = Timeout(5.seconds) val x = actorOne ? "hey" val y = actorTwo ? "you" val z = actorThree ? "there" val answer = for{ a <- x.mapTo[List[(String,String)]] } yield a ++ a ++ a sortBy(_._2) answer.onComplete { case Success(x) => // do something with x p.success(true) case Failure(ex) => // process faliure p.success(false) } p.future }