Сопрограммы правильный способ добавить работу в качестве ребенка от другого?
Учитывая, что у нас есть 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 тоже.