suspend fun a(){}
suspend fun b(){}
suspend fun c(){}
fun d(){}
一、a、b、c串行(launch效果同线程:对于{}内的代码顺序执行,与外层d并行,而不是当执行a挂起后才跳转到{}外执行d)
fun test(){
viewModelScope.launch {
a()
b()
c()
}
d()
}
二、a、b、c并行
fun test(){
viewModelScope.launch {
launch {
a()
}
launch {
b()
}
launch {
c()
}
}
}
三、a、b并行,当都完成后执行c
1、launch + join方式
viewModelScope.launch {
val jobA = launch {
a()
}
val jobB = launch {
b()
}
jobA.join()
jobB.join()
c()
}
注:a或b发生异常时会导致父协程终止,从而导致其他子协程也都终止
2、async + await方式
viewModelScope.launch {
val deferredA = async {
a()
}
val deferredB = async {
b()
}
deferredA.await()
deferredB.await()
c()
}
注:a或b发生异常时父协程不会终止,但由于收不到子协程的结果导致一直等待,c无法执行