关于协程作用域的一点疑问

来源:12-11 案例:仿官方框架实现作用域2

慕雪4289266

2020-10-21

首先我们知道completion是AbstractCoroutine的子类,所以它是一个CoroutineScope。

而如果在协程体中继续调用其他的suspend函数,比如叫A函数,则A函数参数传递进来的continuation是协程本体SuspendLambda,并不是completion,所以它并不是一个CoroutineScope。

老师也说,通过coroutineScope函数可以在suspend函数中获取到当前的协程作用域,我看了下,这个函数只是对传递进来的SuspendLambda进行了包装,创建了一个新的AbstractCoroutine子类对象ScopeCoroutine作为它的CoroutineScope。

问题在于,协程的CoroutineScope实际上是completion,supend函数中的CoroutineScope是ScopeCoroutine,它们两个之间没有任何关系吧?为什么说coroutineScope函数可以获取到当前的协程作用域呢?

写回答

1回答

bennyhuo

2020-10-22

其实要理解作用域从效果上来看就是异常处理取消响应以及协程的父子关系,但实际上这些关联都是通过上下文实现的。

coroutineScope 本身的含义就是默认的父子关系,使用他只不过是拿到一个CoroutineScope类型的实例而已。

0
4
慕雪4289266
回复
bennyhuo
老师真棒!
2020-10-30
共4条回复

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1695 学习 · 447 问题

查看课程