协程构建器

launchasync构建器都用来启动新协程

  • launch,返回一个Job并且不附带任何结果值
  • async,返回一个Deferred,Deferred也是一个Job,可以使用.await()在一个延期的值上得到它的最终结果。

join与await等待协程的作业

启动协程

@Test
fun test_coroutine_builder() = runBlocking {
val job = launch {
delay(1000L)
println("job1 finished")
}

val async = async {
delay(1000L)
println("job2 finished")
"job2 result"
}
println(async.await())
}

可以看到 async 返回了一个Deferred<out T>(在上面的例子是Deferred<String>)的job对象,可以通过async.await()来获取这个String的值

协作作业

启动三个协程,后面的协程需要等待前面的协程完成作业后才会启动

fun test_coroutine_join() = runBlocking {
val job1 = launch {
delay(1000L)
println("Job One")
}
job1.join()
val job2 = launch {
delay(1000L)
println("Job Two")
}
job2.join()
val job3= launch {
delay(1000L)
println("Job Three")
}
}
//顺序输出 三个结果

可以看到,首先输出结果Job One,等待完成后启动job2,job2完成后启动job3