Akka Actor中的timers.startSingleTimer和scheduler.scheduleOnce有什么区别?

mkU*_*tra 4 scala scheduling actor akka

我正在设计一个应该安排向自身发送消息的演员。

我注意到至少有两种方法可以做到这一点。

我想了解选择正确选择的区别。

第一种是akka.actor.Timers的一种方法:

def startSingleTimer(key: Any, msg: Any, timeout: FiniteDuration): Unit
Run Code Online (Sandbox Code Playgroud)

第二种是actor上下文系统的调度程序的常见方法:

final def scheduleOnce(
    delay:    FiniteDuration,
    receiver: ActorRef,
    message:  Any)(implicit executor: ExecutionContext,
                            sender: ActorRef = Actor.noSender): Cancellable
Run Code Online (Sandbox Code Playgroud)

题:

  • 在向自己安排消息的情况下,它们之间的主要区别是什么?
  • 将actor上下文传递给scheduleOnce方法是一个好主意吗?

Iva*_*iuc 5

akka.actor.Timers.startSingleTimer

  • 只能在演员内使用
  • 允许自己安排一条消息,即无法安排给其他参与者的消息
  • 如果演员死亡,活动计时器将自动取消
  • 跟踪用户提供的活动计时器 key

context.system.scheduler.scheduleOnce

  • 可用于安排参与者外部和内部的消息
  • 需要显式ActorRefreceiver和可选的sender
  • 没有自动清理过程。应该通过调用return来显式处理所有内容akka.actor.Cancellable

因此,如果您只需要自己安排消息,请选择 akka.actor.Timers

将actor上下文传递给scheduleOnce方法是一个好主意吗?

不确定要以哪种方式进行操作,但是通常,actor上下文必须仅在receivemethod 内使用,并且不能传递到既不在的回调方法中使用的actor之外Futures