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,
第二个延迟是:1000LTL;博士
不,不同工作的延误不会相互影响
对于第一个问题,显然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不会受到协同进程集体延迟的影响?