есть модуль, в котором есть suspend doWork, которым корутины из дерева пользуются. Внутри doWork я хочу запустить ещё парочку корутин, которые будут работать в фоне после возврата doWork, но при этом являться частью того дерева, от которого вызов пришёл. Канонично будет сделать так?
suspend fun doWork() {
CoroutineScope(coroutineContext).launch { ... }
}
Ну можно еще родительский скоуп передать в виде параметра или ресивера На счет этого варианта не скажу про тонкости, а так должен паботать
Смысл structured concurrency как раз в том, что все корутины должны завершаться после завершения метода. Иными словами, если смотрим на вызов какой-то функции, то должно быть "даже, если оно внутри что-то запускает, то всё это добро там и заканчивается" Если же прямо реально нужно, чтрбы не завершалось есть варианты: * называть функцию ...Async * передавать в функцию scope, который и будет как раз определять "когда оно закончится". Но тут те же правила: в идеале, scope должны передаваться не хаотично, а "сверху вниз".
Обсуждают сегодня