有没有办法在 Kotlin 协程范围内启动可运行的?



上下文是我需要使用一些使用旧世界线程模型的遗留Java代码。线程池执行程序、调度程序以及可运行对象和线程。

但是,我的新代码都与协程兼容。

所以,给定一个可运行的

val runnable = Runnable { 
print("Hurray")
}

有没有比以下感觉有点笨拙的更好的方法在协程范围内运行这个可运行对象(你实际上只是在绕过你试图运行一个可运行物并在协程中挤压它的事实(

GlobalScope.launch(Dispatchers.IO) { runnable.run() }

有没有办法与可运行项和协程互操作?

鉴于您在问题中的全部输入,这就是执行Runnable所需的全部内容:

runnable.run()

现在,如果您隐式地假设该可运行线程背后存在一些持久的计算或阻塞 I/O,并且您不想阻塞当前线程,那么您必须将其调度到后台线程池,这与您在 Java 中必须执行的操作完全相同。在这种情况下,你必须写出你所谓的"笨拙"成语。

如果你的愿望是能够只编写runnable.run()并让 Kotlin 以某种方式自动地将阻塞 IO 代码转换为挂起,那么从根本上说这是不可能的。在这种情况下,Java 代码执行本机系统调用,这会阻止调用线程,并且无法绕过这一事实。

最新更新