Akka Actor 中 timers.startSingleTimer 和 scheduler.scheduleOnce 有什么区别?
What is the difference between timers.startSingleTimer and scheduler.scheduleOnce in Akka Actor?
我正在设计一个应该安排向自己发送消息的 actor。
我注意到至少有两种方法可以做到。
我想了解其中的区别,以便选择合适的。
第一种是akka.actor.Timers的一种方法:
def startSingleTimer(key: Any, msg: Any, timeout: FiniteDuration): Unit
第二种是 actor 上下文系统调度器的常见方式:
final def scheduleOnce(
delay: FiniteDuration,
receiver: ActorRef,
message: Any)(implicit executor: ExecutionContext,
sender: ActorRef = Actor.noSender): Cancellable
问题:
- 在安排a的情况下,这是它们之间的主要区别
给自己发消息?
- 将 actor 上下文传递给
scheduleOnce
方法是个好主意吗?
akka.actor.Timers.startSingleTimer
- 只能在一个actor中使用
- 允许仅向自己安排消息,即不可能向其他一些参与者安排消息
- 如果 actor 死亡,活动计时器会自动取消
- 跟踪用户提供的活动计时器
key
context.system.scheduler.scheduleOnce
- 可用于在 actors 外部和内部调度消息
receiver
需要明确的 ActorRef
和可选的 sender
- 没有自动清理过程。所有都应该通过调用返回的
akka.actor.Cancellable
来明确处理
因此,如果您只需要为自己安排消息,请选择 akka.actor.Timers
Is it a good idea to pass actor context to scheduleOnce method?
不确定您要以何种方式执行此操作,但一般来说,actor 上下文必须仅在 receive
方法内使用,而不能传递到 actor 外部,也不会在 Futures
的回调方法中使用.
我正在设计一个应该安排向自己发送消息的 actor。
我注意到至少有两种方法可以做到。
我想了解其中的区别,以便选择合适的。
第一种是akka.actor.Timers的一种方法:
def startSingleTimer(key: Any, msg: Any, timeout: FiniteDuration): Unit
第二种是 actor 上下文系统调度器的常见方式:
final def scheduleOnce(
delay: FiniteDuration,
receiver: ActorRef,
message: Any)(implicit executor: ExecutionContext,
sender: ActorRef = Actor.noSender): Cancellable
问题:
- 在安排a的情况下,这是它们之间的主要区别 给自己发消息?
- 将 actor 上下文传递给
scheduleOnce
方法是个好主意吗?
akka.actor.Timers.startSingleTimer
- 只能在一个actor中使用
- 允许仅向自己安排消息,即不可能向其他一些参与者安排消息
- 如果 actor 死亡,活动计时器会自动取消
- 跟踪用户提供的活动计时器
key
context.system.scheduler.scheduleOnce
- 可用于在 actors 外部和内部调度消息
receiver
需要明确的ActorRef
和可选的sender
- 没有自动清理过程。所有都应该通过调用返回的
akka.actor.Cancellable
来明确处理
因此,如果您只需要为自己安排消息,请选择 akka.actor.Timers
Is it a good idea to pass actor context to scheduleOnce method?
不确定您要以何种方式执行此操作,但一般来说,actor 上下文必须仅在 receive
方法内使用,而不能传递到 actor 外部,也不会在 Futures
的回调方法中使用.