2012-09-07 40 views
5

Tôi đã viết mã mẫu bắt đầu một diễn viên, giết nó và kết thúc thực hiện.chấm dứt chính xác các diễn viên akka trong scala

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 
    } 
} 

Mã này in:

[info] prestart 
[info] poststop 

Nhưng nó không chịu dừng lại cho đến khi tôi giết chết quá trình với tổ hợp phím Ctrl-C

ứng dụng không gì chờ đợi? Làm thế nào tôi có thể ngăn chặn nó một cách thích hợp?

+2

Tài liệu của Akka có thể giúp nơi nó nói 'context.stop' tại http://doc.akka.io/api/akka/2.0.3/#akka.actor.Actor. –

Trả lời

8

Có thể thực hiện cuộc gọi đến ActorSystem.shutdown() sẽ thực hiện thủ thuật.

Theo akka docs:

trừu tượng def shutdown(): Unit

Dừng hệ thống nam diễn viên này. Điều này sẽ ngăn cản diễn viên người giám hộ, lần lượt sẽ ngăn chặn tất cả các diễn viên con đệ quy, sau đó là người giám hộ hệ thống (bên dưới các diễn viên khai thác) và thực hiện tất cả các trình xử lý chấm dứt đã đăng ký (xem ActorSystem.registerOnTermination).

+1

Xin lưu ý: [như của Akka 2.4] (http://doc.akka.io/docs/akka/snapshot/project/migration-guide-2.3.x-2.4.x.html#Actor_system_shutdown) bạn nên sử dụng 'ActorSystem .terminate() '. Điều này trả về một 'Future [Terminated]' bạn có thể chờ đợi. – 203

Các vấn đề liên quan