Остановите актеров Scala, когда они простаивают

Я использую актеров, чтобы распараллелить некоторые работы. Я создаю список актеров и отправляю им сообщения случайным образом.

val actors = Range(1, threads + 1).map(_ => new MyActor)
actors.foreach(a => a.start)


val messages: List[String] = getMessages()

messages.foreach { m =>
   actors((Math.random() * actors.size).toInt) ! m
}

actors.foreach(_ ! "KILLME")

var exit = false
while (!exit) {
  Thread.sleep(1000L)
  exit = actors.foldLeft(true) { (ac, imp) => 
      ac && (imp.getState.toString == "Terminated")
  }
}

Это код актера:

  def act {
    while (true) {
      receive {
        case "KILLME" => return
        case m: String => doSomeComplexThingWith(m)
      }
    }
  }

Если я запускаю этот код, приложение будет работать вечно, пока я не заставлю его выйти. Я хочу, чтобы приложение остановилось после того, как все сообщения были обработаны группой актеров. Есть ли способ обнаружить, что все участники не работают в течение некоторого времени, и закончить приложение?

0 ответов

Другие вопросы по тегам