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

Ожидание в Kotlin

Код после launch может выполниться раньше, чем закончится фоновая лямбда. Метод join у Job приостанавливает текущую корутину до полного завершения выбранной задачи.

Так связывают основной поток шагов с результатом фоновой работы: сначала старт, затем явное ожидание, затем код, которому нужен готовый итог:

import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() { runBlocking { val worker = launch { delay(80) println("done") } worker.join() println("after") } }

"after" не появится раньше "done": join блокирует родительскую корутину, но не занимает поток крутящимся ожиданием.

Для двух задач порядок ожидания задают явно. Сначала дожидаются первой, потом второй, и только потом печатают общую метку:

import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() { runBlocking { val early = launch { delay(30) println("early") } val late = launch { delay(60) println("late") } early.join() late.join() println("all") } }

Запустите фоновую корутину, которая после паузы печатает "data". Дождитесь её через join и выведите "saved".

Две фоновые задачи выводят "p" и "q" с разной длительностью паузы. После join для обеих напечатайте "end".

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