2017-11-16 13 views
0

特定の間隔で俳優にメッセージを送信する必要があります。Akkaスケジューラが完了していない

  1. readLine()右のそれの後に入れてください:

     
    val sendSchedule = system.scheduler.schedule(0 milliseconds, 5 minutes, senderActor, doSomething()) 
    readLine() 
    

    object SendToActor extends App { 
    
        import Sender._ 
    
        val system: ActorSystem = ActorSystem("sender") 
    
        try { 
        val senderActor: ActorRef = system.actorOf(Sender.props, "sendActor") 
        val sendSchedule = 
         system.scheduler.schedule(0 milliseconds, 5 minutes, senderActor, doSomething()) 
        } finally { 
        system.terminate() 
        } 
    } 
    

    残念ながら、スケジューラは、私は、次のいずれかを実行しない限り、実行していないようです:私は、次のコードを使用しています

  2. すぐ後にThread.sleep()を置きます。

     
    val sendSchedule = system.scheduler.schedule(0 milliseconds, 5 minutes, senderActor, doSomething()) 
    Thread.sleep(10000) 
    

上記のようにスケジューラが動作しないのはなぜですか?働くために睡眠が必要なのはなぜですか?

答えて

3

おそらく、あなたがスケジューラを定義した直後に俳優システムを終了させるからです。

+0

意味があります。 system.terminate()を削除して、プロセスを確認します。しかし、スケジュールされたタスクが終了するまで、tryブロックは生き残ってはいけませんか?.Thanks –

+1

No @ F.Lun、 'system.scheduler.schedule'はすぐに戻り、呼び出し元をブロックしません。 – mingchuno

関連する問題