CoroutineContext:是协程持久化的上下文,它是不允许重复的数组, 这个数组中的每个元素都有一个唯一的[键]。键通过引用进行比较,主要用来构建协程作用域。
open operator fun plus(
context: CoroutineContext
): CoroutineContext
(source)
返回当前作用域的对象和另外一个作用域的对象。两个作用域中的对象如果相同就会去除。
JOB接口
interface Job : Element
(source)
job代表一个可以取消的后台工作任务。job被设计成了子父类继承结构,如果父job取消那么子job也会递归的取消。除了CancellationException之外,子Job异常会导致父job以及父job的子类都取消。(使用SupervisorJob可以消除这个问题)
Deferred接口
这是一个能够返回结果的job
interface Deferred<out T> : Job
(source)
deferred和job具有相同的状态机,可以通过await()方法检索计算成功或者是失败的结果,如果失败就会抛出异常。
此接口上的函数,以及它的派生所有接口上的函数都是线程安全的。
CoroutineScope
interface CoroutineScope
(source)
协程上下文。每个协程构造器都是coroutineScope的拓展。
使用plus 操作符可以把一个上下文对象加入到当前作用域。
CoroutineDispatcher
abstract class CoroutineDispatcher : ContinuationInterceptor (source)
协程的调度类。
ContinuationInterceptor
interface ContinuationInterceptor : Element
(source)
标记拦截协程延续的协程上下文元素。协程框架使用ContinuationInterceptor.Key来检索拦截器,并通过interceptContinuation调用拦截所有协程。
CoroutineExceptionHandler
interface CoroutineExceptionHandler : Element (source)
协程上下文中的可选元素,用于处理未捕获的异常。
通常,未捕获的异常只能由使用启动构建器创建的根协程产生。所有子协程(在另一个Job的上下文中创建的协程)将其异常的处理委托给其父协程,父协程也委托给父协程,依此类推,直到根,因此永远不会使用安装在其上下文中的协程。
与SupervisorJob一起运行的协程不会将异常传播到其父协程,并被视为根协程。使用async创建的协程始终捕获其所有异常并在生成的Deferred对象中表示它们,因此它不会导致未捕获的异常。CoroutineExceptionHandler