Сопрограммы правильный способ добавить работу в качестве ребенка от другого? - PullRequest
0 голосов
/ 17 февраля 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете использовать фабричную функцию 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 голосов
/ 17 февраля 2019

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

...