前言
最近在找工作,正好有实现可以学习学习自己期待已久的协程,协程可以让你的代码更加的清爽,接下来就简单的说说协程的作用域。
协程上下文
在协程的源代码中协程的上下文是一个CoroutineContext接口,他就是一个存储实现了CoroutineContext接口的元素的集合,也就是协程上下文是各种不同元素的集合。其中主元素是协程中的 Job,Dispatcher和,ContinuationInterceptor等等的元素。
默认启动通过launch启动一个协程的时候包含一个继承自作用域的CoroutineContext,和一个默认的启动模式,调度器和要执行的协程体,之后返回一个Job
此处说明一下调度器Dispatcher就是一个CoroutineDispatcher它实现了ContinuationInterceptor这个接口通过内部的interceptContinuation获取一个Continuation对象,通过resume和resumeWithException对协程体内部的执行的成功与否进行处理
作用域
在协程的源代码中有一个接口 CoroutineScope用来指定协程的作用域
- CoroutineContext:协程的上下文
- MainScope:实现了 CoroutineScope接口 同时是通过调度器调度到了主线程的协程作用域
- GlobalScope:实现了 CoroutineScope接口 同时执行了一个空的上下文对象的协程作用域
- coroutineContext:通过这个方法可以在一个协程中启动协程是承袭他的上下文,同时内部的job将成为外部job 的子job,当一个父协程被取消的时候,所有它的子协程也会被递归的取消。
- CoroutineScope(coroutineContext:CoroutineContext):通过传递一个协程上下文实现作用域的创建