Kotlin coroutines GlobalScope.launch vs runBlocking



这两种方法之间有任何区别吗?

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还活着,该本地块就不会退出。

相关内容

  • 没有找到相关文章

最新更新