给定我们有 job1 : Job
和 job2 : Job
,我们想让 job2
成为 job1
的孩子(它们单独创建没有关系)。
声明这种关系的正确方法是什么?因此,当job1
被取消时,job2
也被取消...
我尝试了job1.attachChild(e1.job2 as ChildJob)
,但这是内部API。从Job1 Coroutine启动Job2时,我不想进行一些黑客攻击。
您可以使用接收父作业作为参数的Job(parent: Job?)
出厂功能。它具有以下定义:
public fun Job(parent: Job? = null): Job
这意味着参数 parent 是可选的。因此,您可以这样创建工作:
var parentJob: Job = Job()
var childJob: Job = Job(parentJob)
还要查看SupervisorJob
,可用于自定义Job
的默认行为。SupervisorJob
工厂功能具有相似的定义:
fun SupervisorJob(parent: Job? = null): Job
只需从Job1的范围内启动Job2即可。Job2将继承范围,因此,如果取消Job1,那么Job2也是如此。