我现在有一个方法,可以创建一个调度程序,在设定的时间间隔内向参与者发送消息。
我可以停止创建这些调度程序的执行元,但这不会停止调度程序。
private def initialiseTask(taskName: String, taskActorRef: ActorRef, interval: FiniteDuration,
startDelay: FiniteDuration = 0 milliseconds, message: Any = "tick"): Unit = {
logger.debug(s"Initialising task: $taskName")
system.scheduler.schedule(startDelay,
interval,
taskActorRef,
message)
logger.debug(s"$taskName initialised")
}
正如您所想象的,在中,为每个参与者调用方法,我希望在该参与者启动后为其创建一个计划。我以前使用过调度程序,并通过将其分配给瓦尔,然后对它们使用.cancel()
来取消它们,但是,鉴于此调度程序用于计划多个事情,我不确定如何才能取消此操作。
谢谢你的帮助!
1条答案
按热度按时间r55awzrz1#
要取消计划的发送,您需要保存调度程序在您调用
schedule
时提供的Cancellable
。由于您是在执行元中调度,因此此操作的逻辑位置将是执行元状态的一部分:您可以稍后向执行元发送消息以通知它取消已排定的发送。
Map
可能是最适合存储Cancellable
的结构。如果你不打算重用taskName
,那么它将是一个很好的键(也就是说,你将有一个Map[String, Cancellable]
),或者你可能想包括taskActorRef
或message
。具体如何执行取决于参与者定义的风格(例如,它是使用FSM DSL还是
context.become
,还是通过var
跟踪状态?)。