2012-09-07 8 views
5

私はアクターを開始し、それを殺して実行を終了するサンプルコードを書きました。は正しくスカラーのakkaアクターを終了します

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

何のためにアプリケーション待たないとプロセスを強制終了するまで停止することを拒否?どのようにしてそれを適切な方法で止めることができますか?

+2

Akkaのマニュアルは、http://doc.akka.io/api/akka/2.0.3/#akka.actor.Actorの 'context.stop'というところで役に立ちます。 –

答えて

8

おそらく、ActorSystem.shutdown()を呼び出すと、このトリックが実行されます。 akka docsによると

:DEF

抽象shutdown(): Unit

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

+1

注意:[Akka 2.4以降](http://doc.akka.io/docs/akka/snapshot/project/migration-guide-2.3.x-2.4.x.html#Actor_system_shutdown)には 'ActorSystem .terminate() 'これはあなたがおそらく待つことができる 'Future [Terminated]'を返します。 – 203

関連する問題