持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
协程构建器
launch与async构建器都用来启动新的协程
- launch 返回一个job 并且不附带任何结果值
- async 返回一个deferred(也是一个job),可以使用await得到结果
Job对象
对于每一个创建的协程(通过launch或者async),会返回一个job实例,该实例是协程的唯一标示,并且负责管理协程的生命周期
一个任务可以包含一系列状态:新创建(new)、活跃(Active)、完成中(completing)、已完成(completed)、取消中(cancelling)和已取消(cancelled)。虽然我们无法访问这些状态,但是我们可以访问job的属性:isActive,isCancelled,isCompleted
Job的生命周期
isActive:job.isActive()返回true时表示协程处于活跃状态。 isCancelled:调用了job.cancel()方法,job.isCancelled()返回true,表示协程处于取消状态。 isCompleted:协程执行完后,job.isCompleted返回true,表示协程处于结束状态。 start:启动协程,蓝家在模式下使用。 cancel:取消协程。
协程作用域构建器
- coroutineScope 挂起函数
- runBlocking 常规函数 他们都会等待其他协程体以及所有子协程结束,主要区别在与runBlocking方法会阻塞当前线程来等待,而coroutineScope只会挂起,会释放底层线程用于其他
协程的作用域构建器
coroutineScope与supervisorScope的区别
- coroutineScope:一个协程失败了,所有其他兄弟协程也会被取消。
- supervisorScope:一个协程失败了,不会影响其他兄弟协程
协程的启动模式
- Default:协助程创建后,立即开始调度,在调度前如果协程被取消,则直接进入取消响应的状态
- ATOMIC:协程创建后,立即开始调度,协程执行到第一个挂起点之前不响应取消
- LAZY:只有协程被需要时,包括主动调用协程的start,join或者await等函数时才会开始调度,如果调度前被取消,那么该协程直接进入异常结束状态
- UNDISPATCHED:协程创建后立即在当前函数调用栈中执行,知道遇到第一个挂起点