I need to start Akka (2.0) actor system, send in some messages, then wait for it to do heavy lifting. After that, I need to do something unrelated to those actors.
I tried to wait for all actors to stop with following code:
val system = new ActorSystem("parallelRunners")
val master = system.actorOf(Props[Master])
master ! Start
system.awaitTermination // <-- hangs here
All actors kill themselves via self ! PoisonPill
. What am I doing wrong?
You can also kill the
ActorSystem
from the main thread by usingsystem.shutdown
. But that operation is asynchronous. You only need to usesystem.awaitTermination
if you need to block the main thread until it completes. If your parallelRunners return something useful for the rest of the program, then it would probably be easiest to not block and continue your program.