像 system.shutdown 和 awaitTermination

akka system.shutdown and awaitTermination

在我的程序的最后调用了以下代码(它是用 JRuby 编写的):

@na.tell(PoisonPill) if defined? @na   # @na, @sa and @pe are Actors
@sa.tell(PoisonPill) if defined? @sa
@pe.tell(PoisonPill) if defined? @pe

@@system.shutdown    # @@system is the ActorSystem
@@system.awaitTermination

我发现了这种方法 here 但我不明白为什么它有效。

是否awaitTermination等待所有Actor终止?

调用awaitTermination之前@@system不是已经关闭了吗?

编辑: 我注意到我什至不需要调用 tell(PoisonPill)。我把它注释掉了,它仍然有效...

好的,我现在解决了。当我调用 system.shutdown 时,所有参与者都在完成当前任务后终止。这不是我想要的,因为队列中可能还有更多任务。

所以我在主线程结束时向每个演员发送一个 PoisonPill,然后等待他们终止。我还在每个演员中使用函数 postStop 来设置一个 finished 标志并在所有演员完成后关闭 system

import Actors   # needed for Java-style poisonPill

actor1.tell(Actors::poisonPill)  # for Akka 2.0.0
actor2.tell(Actors::poisonPill)
system.awaitTermination