Сопрограммы правильный способ добавить работу в качестве ребенка от другого?

Учитывая, что у нас есть job1 : Job а также job2 : Job и мы хотим сделать job2 ребенок job1 (они созданы отдельно не имеют никакого отношения).

Как правильно объявить эти отношения? так что когда job1 отменено job2 отменяется также...

Я старался job1.attachChild(e1.job2 as ChildJob) но это внутренний API. Я не хочу делать взломать, когда я запускаю job2 из сопрограммы job1.

2 ответа

Вы можете использовать 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

Просто запустите job2 из сферы действия job1. Job2 унаследует область, и поэтому, если job1 отменяется, то и job2 тоже.

Другие вопросы по тегам