类中的GlobalScope.launch(coroutineContext)vs launch()扩展了CoroutineScope

时间:2019-09-14 05:11:11

标签: kotlin kotlin-coroutines

如下所示的代码,

  1. 两个launchWithXXX函数将在MainScope中运行吗?他们是否为运行这两个作业都创建了相同的协程环境?
  2. 调用dispose()时,两个功能都将被取消吗?
class A : CoroutineScope by MainScope() {

    fun launchWithGlobalScope() {
        GlobalScope.launch(coroutineContext) {
            // Run jobs
        }
    }

    fun launchWithClassScope() {
        launch {
            // Run jobs too
        }
    }

    fun dispose() {
        cancel()
    }
}

1 个答案:

答案 0 :(得分:3)

答案1:否。MainScope定义了使用UI组件执行操作的范围。因此它在您平台的UI线程中运行。 GlobalScope是具有自己的线程池的作用域,并使用其中一个线程运行协程。

2的答案:cancel只会停止示例中的MainScope以及由此范围创建的所有协程。