如果指定的 actor 已停止,是否会发送使用 scheduleOnce 安排的消息?

Will a message scheduled with scheduleOnce be sent if the actor specified has been stopped?

我使用 scheduleOnce 安排消息:

val cancellableMessage = system.schedule.scheduleOnce(500 milliseconds, self, "hi")

然后我 运行 一个方法,最后,这样做:

cancellableMessage.cancel()
context.stop(self)

我看到过关于定期发送消息的问题,例如Akka Scala actor scheduled message does not appear to fire,其中记录了死信,因为演员已停止。但这些是反复出现的信息。如果我以上述方式使用 scheduleOnce 代替,我仍然会看到死信吗? Akka 是否能够识别,因为我想向 self 发送消息,后来我停止了 self,它不会发送消息吗?

我最怕的是500毫秒之后我才能正确取消它的发送(因为有一个特定的点我知道无论如何我都可以取消它),但是在我之后输入取消它的方法,导致死信。不是灾难,但肯定不愉快。

我相信因为调度程序是在 ActorSystem 级别完成的,所以它不会检查消息的接收者。您可以想象您的调度程序将 self ! "hi" 包装在一个 Runnable 中,然后将运行程序提交给执行程序,它会盲目地执行它。

所以,即使你的收件人死了,消息也会被发送到相应的 ActorRef,并在 DeadLetter 中结束。