在Scala Monix Scheduler中,如何将异常传播到主程序



我有一个MonixScheduler,它调度容易出错的任务:

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,有没有同样的方法?

由于调度程序异步运行,因此无法捕获异常。

如果您使用的是cats-effect IO(或monix Task(,则可以使用.tempt,然后在非此即彼上使用左映射来处理异常。但您必须明确取消计划的作业。

相关内容

  • 没有找到相关文章

最新更新