1

我有一个调度容易出错的任务的Monix : Scheduler

import scala.concurrent.duration._
import monix.eval.Task
import monix.execution.Scheduler
import java.time._

scheduler.scheduleWithFixedDelay(0.seconds, 1.seconds) {
    IO(println("qq"))
        .map{ _ => 
            if (Instant.now.getEpochSecond % 5 == 0) 
                throw new Exception()
        }
        .unsafeRunSync()
}

问题是——如果调度程序内的任务抛出异常,调度程序停止并且异常不会传播到主程序。我希望主程序获取异常并处理它(实际上我想停止整个程序。)。

我可能只是sys.exit()在里面打电话,但我认为这并不理想,因为父进程应该监督子进程。

使用时Task我可以从主程序中捕获它task.runSyncUnsafe(),因为Scheduler有没有办法做同样的事情?

4

1 回答 1

0

您无法捕获异常,因为调度程序异步运行。

如果您使用的是猫效应 IO(或 monix 任务),您可以使用 .attempt,然后在 Either 上留下 map 来处理异常。但是您必须明确取消计划的作业。

于 2018-07-24T04:24:07.247 回答