正确终止scala中的akka​​ actor

ayv*_*ngo 5 scala actor akka

我编写了启动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
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码打印:

[info] prestart
[info] poststop
Run Code Online (Sandbox Code Playgroud)

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

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

Gar*_*uma 8

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

根据akka文档:

抽象的def shutdown(): Unit

停止这个演员系统.这将停止守护者,后者将递归地停止其所有子actor,然后是系统监护人(日志记录角色所在的位置)和执行所有已注册的终止处理程序(请参阅ActorSystem.registerOnTermination).