一分钟--协程中的一些类

202 阅读2分钟

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