scala – 理解中的期货的执行顺序(顺序或并发)是什么?
发布时间:2020-12-16 09:58:05 所属栏目:安全 来源:网络整理
导读:val f: Future[Result] = for { x - ask(actorA,Request).mapTo[Int] // call pattern directly s - (actorB ask Request).mapTo[String] // call by implicit conversion d - (actorC ? Request).mapTo[Double] // call by symbolic name } yield Result(x,
val f: Future[Result] = for { x <- ask(actorA,Request).mapTo[Int] // call pattern directly s <- (actorB ask Request).mapTo[String] // call by implicit conversion d <- (actorC ? Request).mapTo[Double] // call by symbolic name } yield Result(x,s,d) 我想知道for-comprehension中的3个未来是否同时运行.这是从AKKA doc中提取的片段.我的猜测是,当它们被翻译成嵌套的平面地图/地图时,它们是连续的.谢谢! 解决方法
这些期货不同时运行,它们一个接一个地连续运行.
这个for-comprehension首先执行ask(actorA,Request).mapTo [Int].直到这个未来 只有在询问(actorA,Request).mapTo [Int]之后,才执行for-comprehension的下一行(actorB ask Request).mapTo [String]. 一旦这个未来完成,就会评估for-comprehension中的第三个表达,并开始第三个未来. 为了让这些期货同时运行,你必须首先开始所有三个期货,并且只在之后的for-comprehension中使用它们: val fut1 = ask(actorA,Request).mapTo[Int] val fut2 = (actorB ask Request).mapTo[String] val fut3 = (actorB ask Request).mapTo[String] for { x <- fut1 s <- fut2 d <- fut3 } yield Result(x,d) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |