协同作为另一个人的孩子添加工作的正确方法?

问题描述 投票:2回答:2

鉴于我们有job1 : Jobjob2 : Job,我们想让job2成为job1的孩子(他们分别创建的没有关系)。

宣布这种关系的正确方法是什么?所以当job1被取消时,job2也被取消了......

我试过job1.attachChild(e1.job2 as ChildJob),但这是内部api。当我从job1 coroutine启动job2时,我不想做一些黑客攻击。

kotlin coroutine kotlinx.coroutines kotlin-coroutines
2个回答
3
投票

您可以使用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

0
投票

只需从job1的范围内启动job2。 Job2将继承范围,因此如果取消job1,那么job2也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.