kotlin协程的Job和SupervisorJob的一些笔记
2020-08-12 本文已影响0人
带带大湿兄
-
Job
是协程的默认context
- 子协程不会继承父协程的
context
,会使用默认值 - 协程的上下文为
SupervisorJob
时,该协程中的异常不会向外传播,因此不会影响其父亲/兄弟协程,也不会被其兄弟协程抛出的异常影响 - 正确使用SupervisorJob的方法
// job1、job2、job3和job4的上下文都是SupervisorJob
val scope = CoroutineScope(SupervisorJob())
job1 = scope.launch {...}
job2 = scope.launch {...}
supervisorScope {
job3 = launch {...}
job4 = launch {...}
}
-
launch(SupervisorJob()){...}
只会使该协程的上下文变为SupervisorJob
,其大括号内部的上下文依然是Job