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