Руководство UI Coroutines Guide содержит раздел о том, как управлять жизненным циклом сопрограмм пользовательского интерфейса. В нем объясняется, что мы должны создать экземпляр Job
верхнего уровня и передать контекст составной сопрограммы contextJob + UI
всем запускаемым сопрограммам:
launch(contextJob + UI, block = block)
При реализации этого шаблона в моем проекте для меня стало естественным использовать вместо этого contextJob
в качестве родителя:
launch(UI, parent = contextJob, block = block)
Я еще не проверял разницу в поведении, но меня интересует семантическая разница между этими двумя вариантами. На мой взгляд, они очень похожи, но я бы предпочел использовать parent = contextJob
, поскольку это более очевидно, что он делает. В частности, я отмечаю, что parent
может быть null
, но если я использую +
, мне, вероятно, придется использовать NonCancellable
в качестве нулевого объекта.
Есть ли что-нибудь неправильное в использовании contextJob
в качестве parent
аргумента для launch
или actor
?