scala – 可以在演员中使用Akka调度程序吗?
发布时间:2020-12-16 09:45:13 所属栏目:安全 来源:网络整理
导读:我想有可能让演员睡一会儿。演员应该决定自己要睡多久。由于Thread.sleep()不是推荐的方法,我想到在akka中使用调度程序。因此,我定义了一个演员是另一个演员可以注册被唤醒。 class Scheduler extends Actor { def receive = { case Sleep(duration) = con
我想有可能让演员睡一会儿。演员应该决定自己要睡多久。由于Thread.sleep()不是推荐的方法,我想到在akka中使用调度程序。因此,我定义了一个演员是另一个演员可以注册被唤醒。
class Scheduler extends Actor { def receive = { case Sleep(duration) => context.system.scheduler.scheduleOnce(duration) { sender ! Ring } } } 但是发送者从来没有收到Ring消息。 >在一个演员推荐的调度计划? 解决方法
让我先回答标题问题:是的,可以在演员中使用调度程序。
case Sleep(duration) => context.system.scheduler.scheduleOnce(duration,self,Ring) 现在问题背后的问题 你没有说出你实际想要实现的目标,所以我在这里做出一个有经验的猜测,希望演员通常做一些叫做“X”的东西 – 做一些叫做“Y”的东西,暂停一下“活动。对此的完整解决方案将是 class Sleepy extends Actor { def receive = { ... // cases doing “X” case Sleep(duration) => case object WakeUp context.system.scheduler.scheduleOnce(duration,WakeUp) context.become({ case WakeUp => context.unbecome() // drop the rest },discardOld = false) } } 同样可以使用FSM特征和在正常和睡眠状态之间切换来实现。当然,你可以在睡觉时做任何你想要的,例如混合在Akka 2.1中的Stash特性,并在睡觉时为所有(或某些)消息调用stash(),获取WakeUp消息时,取消了所有()或者你可以做一些其他的事情。演员非常灵活。 什么演员不做 演员永远不会睡觉,他们总是处理传入的讯息。如上所示,您可以定义什么意思,但基本原则是您不能挂起一个actor,使其不会处理其邮箱中的邮件。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 将bash stdout/stderr重定向到两个地方?
- angularjs – 显示错误 – “Blink延迟任务以使滚动更顺畅”
- Bootstrap精简教程中秋大放送
- mysql 主从 binlog_format 设置关系
- Twitter称,Scala无法释放原始的无懈可击的不稳定领域.真正?
- scala – 从foreach的短路功能
- Open-Falcon install script(Open-Falcon监控一键安装脚本)
- twitter-bootstrap – Bootstrap 4 – “完整JavaScript”与
- 在vim中更改文件类型时会发生什么?
- 积跬步,聚小流------Bootstrap学习记录(3)