阻塞协程构造器
适用于单元测试的场景,而业务开发中不会用到这种方法
调用了 runBlocking 的主线程会一直 阻塞 直到 runBlocking 内部的协程执行完毕。复制代码
非阻塞协程构造器
生命周期受整个应用程序的生命周期限制,且不能取消复制代码
非阻塞协程构造器
经过 context 参数去管理和控制协程的生命周期声明本身做用域
它会建立一个协程做用域而且在全部已启动子协程执行完毕以前不会结束复制代码
在于后者在等待全部子协程执行完毕时不会阻塞当前线程。复制代码
Error: Kotlin: Suspend functions are only allowed to be called from a coroutine or another
suspend function挂起函数,只能在协程中使用复制代码
val job = launch {
repeat(1000) { i ->
println("job: I'm sleeping $i ...")
delay(500L)
}
}
job.cancel() // 取消该做业
job.join() // 等待做业执行结束
有一个能够使 Job 挂起的函数 cancelAndJoin 它合并了对 cancel 以及 join 的调用复制代码
withTimeout(1300L) {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
}
该函数会跑出TimeoutCancellationException 异常
复制代码
能够使用 withTimeoutOrNull代替,经过返回 null 来进行超时操做,从而替代抛出一个异常
bash
val result = withTimeoutOrNull(1300L) {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
"Done" // 在它运行获得结果以前取消它
}
println("Result is $result")
复制代码
待续函数