一个小例子解释async和await的作用

在协程作用域中,使用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行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值