Continuation.resume方法执行的时序是怎样的
来源:11-9 案例:基于非对称协程 API 实现对称协程

慕UI1515986
2020-06-10
老师你好,现在看到了协程的部分,有个地方比较疑惑,就是Continuation.resume方法执行的时序
suspend fun main() {
test1()
//test2()
println("after test")
}
suspend fun test1() = suspendCoroutine<Unit> {
Thread.sleep(5000)
it.resume(Unit)
println("end resume test1")
}
suspend fun test2() = suspendCoroutine<Unit> {
thread {
Thread.sleep(5000)
it.resume(Unit)
println("end resume test2")
}
}
为什么test1和test2的输出会不一样呢,debug看走test1的时候走过了resume之后会继续走println(“end resume test1”),然后才返回到main中的挂起点去执行后续的println(“after test”),但是走test2的时候却又变成了resume调用后回到挂起点去println(“after test”),然后再回到thread的代码块继续执行下面的println(“end resume test2”),这里有点不太明白,希望老师抽空解答一下
写回答
1回答
-
bennyhuo
2020-06-10
因为你在2里面起了新线程呀
072020-08-13
相似问题
yield到底挂起了么?
回答 1
不明白到底懒序列到底哪里好了?
回答 1