5

我已经编写了启动一个actor、杀死它并完成执行的示例代码。

object PureAkka {
  def main(argv : Array[String]) = {
    val actorSystem : ActorSystem = ActorSystem("main")
    val actor : ActorRef = actorSystem.actorOf(Props( new Actor {
      override def receive = {
        case x => println(x)
      }
      override def preStart() = println("prestart")
      override def postStop() = println("poststop")
    } ) )
    Thread.sleep(15000)
    actor ! PoisonPill
  }
}

此代码打印:

[info] prestart
[info] poststop

但它拒绝停止,直到我用 Ctrl-C 终止进程

应用程序在等待什么?我怎样才能以适当的方式阻止它?

4

1 回答 1

8

也许调用 ActorSystem.shutdown() 就可以了。

根据akka 文档

抽象定义 shutdown(): Unit

停止这个演员系统。这将停止监护actor,后者将递归停止其所有子actor,然后是系统监护人(记录actor驻留在其下方)并执行所有已注册的终止处理程序(请参阅ActorSystem.registerOnTermination)。

于 2012-09-07T19:32:30.467 回答