Multithreading 一个协同程序作业中的延迟是否会影响另一个?

Multithreading 一个协同程序作业中的延迟是否会影响另一个?,multithreading,kotlin,kotlin-coroutines,Multithreading,Kotlin,Kotlin Coroutines,根据文档,延迟会挂起协同路由,但不会阻止线程: 延迟是一种特殊的暂停功能。它会在特定的时间内暂停协同程序。挂起协同程序不会阻止底层线程,但允许其他协同程序运行并将底层线程用于其代码 但是,在运行此代码时: fun main() { println("1") GlobalScope.launch { doSomething() delay(1000L) println("3") }

根据文档,延迟会挂起协同路由,但不会阻止线程:

延迟是一种特殊的暂停功能。它会在特定的时间内暂停协同程序。挂起协同程序不会阻止底层线程,但允许其他协同程序运行并将底层线程用于其代码

但是,在运行此代码时:

fun main() {

    println("1")
    GlobalScope.launch {
        doSomething()
        delay(1000L)
        println("3")
    }
    GlobalScope.launch {
        delay(1000L)
        println("4")
    }
    println("5")
}

suspend fun doSomething() {

    delay(500L)
    println("2")
    delay(1000L)
}
给出的输出为:

1
5
2
4
3 
根据我的理解,它应该显示1 5 4 2 3。 这是因为doSomething在第一个协同路由中被调用,因此与第二个协同路由相比,延迟更大,第二个协同路由被异步调用。我的误解在哪里

同样使用此代码,两个值在2秒后一起打印:

fun main() {

    GlobalScope.launch {

        val value1 = doSomething1()
        val value2 = doSomething2()
        println(value1)
        println(value2)
    }
}

suspend fun doSomething1(): String {

    delay(1000L)
    return "This is the answer1"
}

suspend fun doSomething2(): String {

    delay(1000L)
    return "This is the answer2"
}
为什么会这样

so the delay is more as compared to the second coroutine
不,第一次延迟是:500L, 第二个延迟是:1000L

TL;博士

不,不同工作的延误不会相互影响

对于第一个问题,显然1和5是第一个和最后一个,所以我们可以忽略它们。因此,对于其余部分,我们有:

打印 耽搁 总延误 2. 500 500 3. 500, 1000, 1000 2500 4. 1000 1000
这是否意味着2将不受协程延迟的影响,并且只受挂起函数中它之前的延迟的影响?2之前只有一个延迟,即500 in剂量测量。您指的是什么其他延迟?挂起函数中2后的1000延迟和协同程序中的1000延迟挂起函数中的1000延迟和协同程序中的1000延迟,我猜您指的是第一次启动?在Log.dTAG之后,2。所以他们不会影响这个陈述更新了我的答案。这是否意味着2不会受到协同进程集体延迟的影响?