Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCrSc 163 of 299 menu
◀ ▶

Область в Kotlin

Вложенные launch внутри одной suspend-функции должны завершиться, прежде чем функция вернет управление. Для этого служит coroutineScope: блок создает область, где дочерние задачи привязаны к родителю, и не заканчивается, пока все они не отработали.

Функция может напечатать метку до области, внутри запустить две фоновые корутины и только потом закончиться:

import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking suspend fun runPair() = coroutineScope { launch { delay(40) println("L") } launch { delay(40) println("R") } } fun main() { runBlocking { println("start") runPair() println("finish") } }

"finish" идет после "L" и "R": выход из coroutineScope откладывается, пока живы дочерние Job.

Тот же каркас удобен, когда область вложена в другую suspend-функцию без лишних дескрипторов снаружи:

import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking suspend fun emitTags() = coroutineScope { launch { println("x") } launch { println("y") } } fun main() { runBlocking { emitTags() println("z") } }

Оформите suspend-функцию с coroutineScope и двумя launch, печатающими "m" и "n". Вызовите её из runBlocking и после выведите "tail".

Внутри области запустите три фоновые задачи с метками "1", "2" и "3". После полного завершения области напечатайте "ok".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить