这两种方法有什么区别吗?
runBlocking {
launch(coroutineDispatcher) {
// job
}
}
GlobalScope.launch(coroutineDispatcher) {
// job
}
runBlocking
运行新的协程并中断地阻止当前线程直到其完成。该函数不应该在协程中使用。它旨在将常规阻塞代码桥接到以挂起风格编写的库,以在主函数和测试中使用。
// line 1
runBlocking {
// line 2
launch(coroutineDispatcher) {
// line 3
}
// line 4
}
// line 5
someFunction()
如果使用runBlocking
代码行将按以下顺序执行:
line 1
line 2
line 4
line 3
line 5 // this line will be executed after coroutine is finished
全局范围用于启动顶级协程,这些协程在整个应用程序生命周期内运行并且不会提前取消。全局作用域的另一个用途是在 Dispatchers.Unconfined 中运行的运算符,这些运算符没有任何与其关联的作业。
应用程序代码通常应该使用应用程序定义的 CoroutineScope,强烈建议不要在 GlobalScope 实例上使用 async 或 launch。
// line 1
GlobalScope.launch(coroutineDispatcher) {
// line 2
}
// line 3
someFunction()
如果使用GlobalScope.launch
代码行将按以下顺序执行:
line 1
line 3
line 2
Thus runBlocking
阻塞当前线程直到完成,GlobalScope.launch
没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)