首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在Kotlin协程作用域中启动runnable?

有没有办法在Kotlin协程作用域中启动runnable?
EN

Stack Overflow用户
提问于 2020-01-04 16:41:57
回答 1查看 1.3K关注 0票数 7

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

然而,我的新代码是完全兼容协程的。

因此,给定一个runnable

代码语言:javascript
运行
复制
val runnable = Runnable { 
    print("Hurray")
}

有没有更好的方法在协程作用域中运行这个runnable,而不是像下面这样让人感觉有点笨拙(你实际上只是在尝试运行一个runnable并在协程中压缩它)

代码语言:javascript
运行
复制
GlobalScope.launch(Dispatchers.IO) { runnable.run() }

有没有一种可以与runnables和协程互操作的方法?

EN

回答 1

Stack Overflow用户

发布于 2020-01-04 21:35:46

考虑到问题中的全部输入,这就是执行Runnable所需的全部内容

代码语言:javascript
运行
复制
runnable.run()

现在,如果您隐含地假设在该runnable后面有一些持续时间较长的计算或阻塞I/O,并且您不想阻塞当前线程,那么必须将其分派到后台线程池,这与在Java中必须做的完全相同。在这种情况下,你将不得不写你所谓的“笨拙”的成语。

如果你的愿望是能够只写runnable.run(),让Kotlin以某种方式,自动地把你的阻塞IO代码变成挂起,这是不可能的,因为根本原因。在这种情况下,Java代码执行阻塞调用线程的本机系统调用,这是无法避免的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59589214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档