这两种方法之间有任何区别吗?
runBlocking {
launch(coroutineDispatcher) {
// job
}
}
GlobalScope.launch(coroutineDispatcher) {
// job
}
runBlocking
运行新的Coroutine,并阻止当前线程,直到完成为止。不应从Coroutine使用此功能。它旨在将常规阻止代码桥接到以悬挂方式编写的库,用于主要功能和测试中。
// 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
全球范围用于启动在整个应用程序寿命上运行的顶级旋转,并且不会过早取消。全局范围的另一个用途是运行器在调度程序中运行。未共构成,与它们没有任何工作。 应用程序代码通常应该使用应用程序定义的CoroutinesCope,使用异步或在GlobalsCope实例上启动。
// line 1
GlobalScope.launch(coroutineDispatcher) {
// line 2
}
// line 3
someFunction()
如果使用GlobalScope.launch
行,将按照下一个顺序执行代码:
line 1
line 3
line 2
因此, runBlocking
阻止了当前线程,直到完成为止, GlobalScope.launch
均未。
我将尝试不同的解释,而无需重复现有的标准答案。
" coroutine范围"是Coroutine存在的边界。"全球范围"只要申请过程正在运行。如果您使用&quot'globalscope.launch()您可以创建一个生活在应用程序范围中的全球Coroutine。
如果您使用&quot" runblocking {laining()}; quot;您可以创建一个在运行后居住在当地街区的Coroutine。只要其中的coroutines还活着,该本地块就不会退出。