Корутины в Kotlin
Корутины в Kotlin
Корутины (kotlinx.coroutines) — способ писать асинхронный код без callback-ада. Один поток JVM может обслуживать тысячи suspend-операций.
Нужны для Ktor, Android (сеть, Room), Compose.
suspend и launch
import kotlinx.coroutines.*
suspend fun fetchTitle(): String {
delay(100) // не блокирует поток ОС
return "Kotlin"
}
fun main() = runBlocking {
launch {
println("A: ${fetchTitle()}")
}
launch {
println("B: ${fetchTitle()}")
}
}
runBlocking — только в main и тестах; в Android — lifecycleScope, в Ktor — уже внутри сервера.
async — параллельные результаты
suspend fun loadDashboard(): Pair<String, Int> = coroutineScope {
val title = async { fetchTitle() }
val count = async { fetchCount() }
title.await() to count.await()
}
Scope и structured concurrency
| Scope | Где |
|---|---|
runBlocking | тесты, CLI |
coroutineScope | дочерние корутины завершатся вместе |
supervisorScope | ошибка в одном child не отменяет остальных |
viewModelScope | Android ViewModel |
class Repo {
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun refresh(onDone: (String) -> Unit) {
scope.launch {
val data = fetchTitle()
withContext(Dispatchers.Main) {
onDone(data)
}
}
}
fun close() {
scope.cancel()
}
}
Flow — поток значений
fun ticker(): Flow<Int> = flow {
var i = 0
while (true) {
emit(i++)
delay(500)
}
}
// collect в корутине:
// ticker().take(5).collect { println(it) }
StateFlow / SharedFlow — hot-потоки для UI (Compose, ViewModel).
Обработка ошибок
scope.launch {
try {
risky()
} catch (e: IOException) {
// лог, retry
}
}
CoroutineExceptionHandler — для необработанных исключений в launch.
Тесты
import kotlinx.coroutines.test.runTest
@Test
fun loadsTitle() = runTest {
val title = fetchTitle()
assertEquals("Kotlin", title)
}
Зависимость: kotlinx-coroutines-test.
Сравнение с Java
| Java | Kotlin |
|---|---|
CompletableFuture | async / suspend |
ExecutorService | Dispatchers.IO |
| Virtual threads (21+) | корутины легче в DSL |
Связанные материалы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Kotlin - создание языка JetBrains для плавной совместимости с Java и современной разработки. Экосистема Kotlin-приложений - инструменты, фреймворки и мультиплатформенные сценарии разработки. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Набор советов, правил, принципов и обычаев в разработке на этом языке. Основы Kotlin - архитектура проекта, платформенные модули и базовые принципы разработки на языке. Типизация, набор правил определения типа данных значений языка. Операторы и выражения в Kotlin - логика вычислений, приоритеты операций и идиоматичный стиль записи условий. Циклы и управляющие конструкции в Kotlin - идиоматичные способы итерации, условия и управление выполнением. ООП в Kotlin - классы, модификаторы доступа, наследование и идиоматичное проектирование объектных структур. Кавычки, точки, запятые, скобки и прочие знаки препинания. Kotlin использует набор зарезервированных слов для построения синтаксических конструкций языка. Все ключевые слова разделены на категории по назначению. Набор функций, которые включены в стандартную библиотеку языка.История языка Kotlin
Экосистема Kotlin-приложений
Что требуется знать перед началом изучения языка программирования Kotlin
Рекомендации по разработке на Kotlin
Основы языка Kotlin
Типы данных и объявление переменных
Операторы и выражения в Kotlin
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Kotlin
Синтаксис и пунктуация в Kotlin
Ключевые слова языка Kotlin
Встроенные функции и расширения Kotlin