5

アクターを開始し、それを強制終了して実行を終了するサンプルコードを作成しました。

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

このアクターシステムを停止します。これにより、ガーディアンアクターが停止し、次にすべての子アクターが再帰的に停止し、次にシステムガーディアン(その下にロギングアクターが存在します)が停止し、登録されているすべての終了ハンドラーが実行されます(ActorSystem.registerOnTerminationを参照)。

于 2012-09-07T19:32:30.467 に答える