Scala,检查Actor是否已退出
发布时间:2020-12-16 18:15:06 所属栏目:安全 来源:网络整理
导读:在 Scala 2.8中,当我开始演员时,我可以通过消息传递进行通信.这反过来意味着我可以发送最终的Exit()消息或我认为适合我的协议的任何内容. 但是我如何检查演员是否退出?我可以很容易地想象自己有一个任务,一个主演员开始一些工人演员,然后只是等待答案,每次
在
Scala 2.8中,当我开始演员时,我可以通过消息传递进行通信.这反过来意味着我可以发送最终的Exit()消息或我认为适合我的协议的任何内容.
但是我如何检查演员是否退出?我可以很容易地想象自己有一个任务,一个主演员开始一些工人演员,然后只是等待答案,每次检查这是否是最终的答案(即任何演员仍在工作或他们都退出?). 当然,我可以让他们都发回“我已经完成”的消息,然后计算它们,但这在某种程度上是令人不满意的. 在测试工人演员的完成时,最佳做法是什么? 编辑#1 嘿伙计们,我正在研究期货,但遇到了麻烦.有人可以解释为什么这段代码不起作用: package test import scala.actors.Futures._ object FibFut extends Application{ def fib(i:Int):Int = if(i<2) 1 else fib(i-1)+fib(i-2) val f = future{ fib(3) } println(f()) } 如果我在future-body中定义函数fib,它就可以工作.它必须是范围的东西,但我没有上面的任何错误,它只是挂起.任何人? 编辑#2 似乎扩展应用程序并不是一个好方法.定义主要方法使一切正常.以下代码是我正在寻找的,所以Futures得到了大拇指:) package test import scala.actors.Futures._ object FibFut { def fib(i: Int): Int = if (i < 2) 1 else fib(i - 1) + fib(i - 2) def main(args: Array[String]) { val fibs = for (i <- 0 to 50) yield future { fib(i) } for (future <- fibs) println(future()) } } 解决方法
个人而言,我是“我已经完成”消息的粉丝;这是管理工作分配的好方法,作为奖励,你已经知道所有孩子什么时候完成了他们正在做的事情.
但是,如果你真的只想要做一些工作并等到一切准备就绪,请查看scala.actors.Futures.你可以要求它做一些计算: val futureA = Futures.future { val a = veryExpensiveOperation (a,"I'm from the future!") } 如果您提出了多个请求,那么您可以等待所有内容完成: Futures.awaitAll(600*1000,futureA,futureB,futureC,futureD) // Returns once all of A-D have been computed val actualA = futureA() // Now we get the value (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |