kotlin协程async与await
import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis
fun main() {
val time = measureTimeMillis {
runBlocking {
/**
* async 是 CoroutineScope 扩展函数,async 和 launch 的区别在于async 可以返回协程结果,而 launch 不能。
* async默认值 CoroutineStart.DEFAULT 协程在声明同时就被启动(实际上还需被调度执行,但可认为是立即就执行)
* CoroutineStart.LAZY 不主动启动协程,直到主动调用async.await()或async.satrt()后才启动(懒加载模式)
* a.await() + b.await()导致两个协程顺序执行
*/
val a = async(start = CoroutineStart.LAZY) {
delay(2000)
1
}
val b = async(start = CoroutineStart.LAZY) {
delay(3000)
2
}
/* 打破CoroutineStart.LAZY懒加载,协程立即投入执行。
a.start()
b.start()
*/
println(a.await() + b.await())
}
}
println(time)
}
输出:
3
3072
https://zhangphil.blog.csdn.net/article/details/129265638https://zhangphil.blog.csdn.net/article/details/129265638
kotlin协程、线程切换,函数方法委托_zhangphil的博客-CSDN博客runBlocking 内部启动的3个协程做耗时操作,从输出可以看到3个协程交叉并发执行,runBlocking 会等到3个协程执行结束后才退出,输出结果有明确先后顺序。一般编程的技法,比如,在Android中,假设在主线程中实现了一个函数,但该函数是耗时操作,毫无疑问,需要将这个函数的实现切入非主线程中操作,那么可以设计一种托管的函数,在托管的函数里面干脏活,处理完成后,把结果抛到主线程。结果1-a: 5 - tid:22。结果1-b: 5 - tid:24。结果2-a: 9 - tid:22。https://blog.csdn.net/zhangphil/article/details/130161705
https://zhangphil.blog.csdn.net/article/details/129250518https://zhangphil.blog.csdn.net/article/details/129250518