关于 runBlocking 和 coroutineScope


#1

针对于协程,我知道 runBlocking 是创建一个协程作用域,会阻塞线程,coroutineScope 是一个 suspend fun ,会创建一个子协程作用域,不会阻塞线程,那么如果这么写呢

suspend fun printInfo2() {
    coroutineScope {
        runBlocking {
            delay(1000)
            println("end")
        }
    }
}

fun printInfo3() {
    runBlocking {
        coroutineScope {
            delay(1000)
            println("end")
        }
    }
}

虽然这种写法基本不会遇到,但是我想知道,这两个方法因为都是创建了两个作用域,那么是随机执行还是顺序执行


#2

代码可以按照md的格式编辑,可以重新排下版先


#3

弄好了


#4

第一个是作用域里面启动了blocking,阻塞的是这个作用域,第二个是runblocking里面启动了一个作用域,执行完 runblocking 就退出了。实际上没啥可比性


#5

也就是说 第一个不是阨线程了 那我是不是可以这么理解

fun getPrint7() {
    val job = Job()
    val result = CoroutineScope(job)
    result.launch {
        1+2
        println("外层")
        runBlocking {
            launch {
                println("内层")
            }
        }
    }
    result.cancel()
}

这个阻塞的是

 result.launch {
        1+2
        println("外层")
        runBlocking {
            launch {
                println("内层")
            }
        }

的作用域 外层线程不会被限制? 也就是说 runBlocking 只是阻塞它父层的作用域或者线程,它爷爷哪一层的不会被阻塞??


京ICP备16022265号-2 Kotlin China 2017 - 2018