Coroutine Scope (协程作用域) 与异常处理

53 阅读1分钟

协程作用域分为 顶级作用域,协同作用域 与 主从作用域,
分别对应 GlobalScope, coroutineScope, supervisorScope

1. 产生方式:

(1)顶级: GlobalScope
(2)协同: coroutineScope (或者Job嵌套)
(3)主从:supervisorScope (与内部直接子协程主从, 与外部协同)

        GlobalScope.launch { //顶级

            coroutineScope { //协同
                //...
            }

            supervisorScope { //主从
                //...
            }
        }

2. 异常传播方式

不同的作用域,在处理异常上有不同的特征.
顶级: 不向外部传播
协同: 双向传播?
主从: 自上而下、单向传播

异常处理 使用 CoroutineExceptionHandler类 和try catch 结合

        //异常处理
        val coroutineExceptionHandler =  CoroutineExceptionHandler{ coroutineContext, throwable ->
            println("Handle $throwable in CoroutineExceptionHandler")
        }
        
        val topLevelScope = CoroutineScope(coroutineExceptionHandler)
        topLevelScope.launch { 
            //....
        }

(待续...)
参考:juejin.cn/post/693547…