当使用默认 Akka 系统调度程序(来自 actor 内部的 context().system().scheduler().schedule()
)上的方法以及接受目标 actor 的重载之一时,我是否需要使用返回的 Cancelleable 显式取消以在目标 actor 停止时释放资源?
我想调度程序可能是 watch()
目标actor 并自动执行清理,但在文档中的任何地方都找不到它的明确说明。
最佳答案
Scheduler.schedule
的变体其中需要一个 ActorRef
不会监视那个actor(相对于计时器任务而言,它会有相当高的开销),因此您应该始终从actor的postStop
中清除重复计时器。钩。
在本地情况下,我们检查 target.isTerminated
,但该方法总是返回 false
对于不属于沼泽标准本地类型的参与者引用,因此您只能在特定情况下依赖此功能,然后当您扩展应用程序时,您的代码将停止正常工作。另一个考虑因素是上述检查在尝试发送消息时运行,这可能是“软泄漏”(即延迟清理),如果时间安排很长(根据用例,100 毫秒可能已经很长)。
关于scheduling - 使用 Akka 中的默认 Scheduler,我是否需要在目标 Actor 停止时手动取消事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299692/