在协程作用域中,使用async发起一个耗时操作,并返回一个结果
val deferred: Deferred<Int> = scope.async {
delay(1000)
42
}
之后等待这个结果,并使用这个结果
val result = deferred.await()
完整代码:
suspend fun testDeferred() {
val deferred: Deferred<Int> = scope.async {
delay(1000)
42
}
println("continue running...")
val result = deferred.await()
println("Result: $result")
println("after running...")
}
输出:
continue running...
Result: 42
after running...
结合IDE的标识理解:
函数运行到774行时,直接向下进行,这里在子协程中进行耗时操作的处理,不阻塞当前作用域
函数运行到780行时,当前协程被挂起(注意不是阻塞,只是当前的suspend方法停止在了这个地方,等待结果),如果此时有另一个挂起函数和testDeferred同级,会发现那个函数继续在运行。
函数在780行await等到结果后(子协程处理完毕),当前协程恢复,继续向下进行
此时才会执行781行和783行