鉴于我们有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也是如此。