scala – Akka在回复非Actor代码时避免包装未来
发布时间:2020-12-16 18:53:32 所属栏目:安全 来源:网络整理
导读:我正在与Akka 2制作一个小型缓存演员并让演员不要阻止我在期货中执行所有计算.然而问题是这个actor还需要与不在actor中的代码进行交互,因此我需要使用“ask”模式来获取值. 我的问题是,在使用ask模式时,如何避免将计算的Future包含在另一个Future中? 例如 v
我正在与Akka 2制作一个小型缓存演员并让演员不要阻止我在期货中执行所有计算.然而问题是这个actor还需要与不在actor中的代码进行交互,因此我需要使用“ask”模式来获取值.
我的问题是,在使用ask模式时,如何避免将计算的Future包含在另一个Future中? 例如 val f = myCache ? GetOrCalc("myKey",myCalculation) // this will be a Future[Future[...]] but I would like a Future[...] // meanwhile,inside the actor def receive = { case GetOrCalc(key,calculation) => if (keyNotExists) sender ! Future { calculation() } // calculation() is long-running else sender ! cacheMap(key) } 理想情况下,我可以使用Future.pipeTo函数,但我担心这不会被视为非演员代码的“响应” 解决方法
这是解决方案:
val f = myCache ? GetOrCalc("myKey",myCalculation) def receive = { case GetOrCalc(key,calculation) => if (keyNotExists) Future { calculation() } pipeTo sender else sender ! cacheMap(key) } 发送和接收,未来“> HTTP://doc.akka.io/docs/akka/2.0.3/scala/actors.html#Ask_Send-And-Receive-Future (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |