上下文是,我需要使用一些使用旧的线程模型的遗留Java代码。线程池执行器、调度器、可运行程序和线程。
然而,我的新代码是完全兼容协程的。
因此,给定一个runnable
val runnable = Runnable {
print("Hurray")
}有没有更好的方法在协程作用域中运行这个runnable,而不是像下面这样让人感觉有点笨拙(你实际上只是在尝试运行一个runnable并在协程中压缩它)
GlobalScope.launch(Dispatchers.IO) { runnable.run() }有没有一种可以与runnables和协程互操作的方法?
发布于 2020-01-04 21:35:46
考虑到问题中的全部输入,这就是执行Runnable所需的全部内容
runnable.run()现在,如果您隐含地假设在该runnable后面有一些持续时间较长的计算或阻塞I/O,并且您不想阻塞当前线程,那么必须将其分派到后台线程池,这与在Java中必须做的完全相同。在这种情况下,你将不得不写你所谓的“笨拙”的成语。
如果你的愿望是能够只写runnable.run(),让Kotlin以某种方式,自动地把你的阻塞IO代码变成挂起,这是不可能的,因为根本原因。在这种情况下,Java代码执行阻塞调用线程的本机系统调用,这是无法避免的。
https://stackoverflow.com/questions/59589214
复制相似问题