Coroutine是一个适当的方法,可以添加作为另一个人的工作



给定我们有 job1 : Jobjob2 : 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也是如此。

相关内容

  • 没有找到相关文章

最新更新