加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Akka调度程序在异常时停止;它有望吗?

发布时间:2020-12-16 18:17:06 所属栏目:安全 来源:网络整理
导读:我们运行此代码: scheduler.schedule(1 minute,1 minute) { triggerOperations.tick() } 在启动我们的应用程序时,scheduler是一个Akka actorSystem.scheduler. 如果tick()抛出异常,则永远不会再调用它! 我检查了文档,但找不到任何预期的声明.大多数描述是
我们运行此代码:

scheduler.schedule(1 minute,1 minute) { triggerOperations.tick() }

在启动我们的应用程序时,scheduler是一个Akka actorSystem.scheduler.
如果tick()抛出异常,则永远不会再调用它!

我检查了文档,但找不到任何预期的声明.大多数描述是“安排一个函数以初始延迟和频率重复运行”,没有提到如果函数抛出一个激活,任务将停止触发.

我们的akka??版本是2.3.2.

http://doc.akka.io/docs/akka/2.3.4/scala/scheduler.html
http://doc.akka.io/api/akka/2.0/akka/actor/Scheduler.html

这种行为有望吗?是否记录在任何地方?

解决方法

如有疑问,请前往来源.代码有点简洁,但是 this片段:

override def run(): Unit = {
   try {
     runnable.run()
     val driftNanos = clock() - getAndAdd(delay.toNanos)
     if (self.get != null)
       swap(schedule(executor,this,Duration.fromNanos(Math.max(delay.toNanos - driftNanos,1))))
   } catch {
      case _: SchedulerException ? // ignore failure to enqueue or terminated target actor
   }

}

表明如果你的runnable抛出,调度程序不会重新安排下一次执行(根据我的理解,这在swap中发生).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读