-
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