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

Введение в корутины в Kotlin

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

Такой перерыв называют приостановкой. Снаружи это похоже на паузу внутри одной логической задачи, хотя поток в это время может обслуживать другие корутины. Библиотека kotlinx.coroutines дает точку входа и функции, которые умеют так останавливаться.

Для первого знакомства достаточно блока runBlocking: он запускает корутину и не отпускает текущий поток, пока внутренний код не закончится. Внутри вызывают delay - паузу на заданное число миллисекунд, которая не крутит процессор вхолостую:

import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking fun main() { runBlocking { println("before") delay(100) println("after") } }

Между строками "before" и "after" проходит короткая задержка, но программа не зависает намертво: корутина приостанавливается, а после таймера продолжает печать. Весь блок runBlocking считается одной связной задачей с точкой входа main.

Тот же каркас удобен, когда шагов несколько и между ними нужны паузы. Порядок сообщений в консоли сохраняется, хотя внутри работа то идет, то откладывается:

import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking fun main() { runBlocking { println("step 1") delay(50) println("step 2") delay(50) println("step 3") } println("done") }

Строка "done" появляется только когда внутренний блок полностью завершился. Так видно границу корутины: снаружи runBlocking код снова обычный, а внутри доступны приостанавливаемые операции вроде delay.

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