在 Scala 2.8 中,当我启动演员时,我可以通过消息传递进行通信。这反过来意味着我可以发送最终的 Exit() 消息或任何我认为适合我的协议的消息。
但是我将如何检查演员是否已经退出?我可以很容易地想象自己有一个任务,其中一个主演员启动一些工人演员然后只是等待答案,每次检查这是否是最终答案(即是否有任何演员仍在工作或他们都退出了?)。
当然,我可以让他们都发回“我完成了”的消息,然后计算他们,但这有点不满意。
测试worker-actors完成时的最佳实践是什么?
编辑#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
扩展 Application 似乎不是一个好方法。定义一个主要方法使一切正常。下面的代码是我一直在寻找的,所以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())
}
}