Scala, проверьте, завершился ли Actor

в 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())    

}

Он работает, если я определяю функцию fib внутри тела future-body. Это должно быть что-то из области видимости, но я не получаю никаких ошибок с указанным выше, он просто зависает. Кто-нибудь?

РЕДАКТИРОВАТЬ # 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())

  }

}
5
задан Felix 30 November 2010 в 19:16
поделиться