Kotlin 协程可以替代 Java 的 ScheduledThreadPoolExecutor 来调度长时间运行的后台作业吗?

Adi*_*and 5 java backend kotlin server

传统的 java 方法包括通过以下方式获取 ScheduledThreadPoolExecutor

Executors.newScheduledThreadPool(1)

然后Runnable使用诸如scheduleAtFixedRate().

但是,这种方法将您锁定在 Java 的线程模型中,这在 Kotlin 代码库中可能具有挑战性,您要明智地使用 Kotlinsuspend并以协程友好的方式完成长时间运行的作业(例如:网络/数据库操作)。

您始终可以使用runBlocking{}在可运行对象中强制运行您的挂起方法以使用 来安排它们ScheduledThreadPoolExecutor,但这似乎不太优雅。您正在有效地绕过协程线程模型并回到 Java 的模型。

那么,有没有办法使用 Kotlin 的协程来运行长时间运行的后台操作?具有类似于scheduleAtFixedRate-like 方法的 API 的东西(例如:每天下午 5 点运行 X() - 本质上是 Kotlin 友好的 cron 作业替代品。)