Coroutines в Kotlin

НАВИГАЦИЯ ПО СТРАНИЦЕ

Основы работы с корутинами Асинхронные операции

Основы работы с корутинами

Корутины — это легковесные потоки выполнения в Kotlin, предоставляющие удобные средства для асинхронного программирования. Они позволяют написать асинхронный код таким же образом, как и синхронный, делая код более читаемым и поддерживаемым. Давайте рассмотрим основы работы с корутинами.

import kotlinx.coroutines.*

fun main() {
    // Запуск корутины
    GlobalScope.launch {
        delay(1000) // Симуляция асинхронной операции
        println("Hello, Coroutines!")
    }

    // Ожидание завершения корутины (в реальном приложении так делать не нужно)
    Thread.sleep(2000)
}

Асинхронные операции

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    delay(1000) // Симуляция задержки при выполнении запроса
    return "Data from the server"
}

fun main() {
    runBlocking {
        // Запуск асинхронной операции внутри корутины
        val result = async { fetchData() }

        // Другие операции, выполняемые параллельно
        println("Performing other operations...")

        // Ожидание завершения асинхронной операции и получение результата
        val data = result.await()
        println("Received data: $data")
    }
}

В этом примере функция fetchData с пометкой suspend может быть вызвана только внутри корутины. Функция async используется для запуска асинхронной операции, а await используется для ожидания завершения этой операции.

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

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    delay(1000) // Симуляция задержки при выполнении запроса
    throw Exception("Error fetching data")
}

fun main() {
    runBlocking {
        try {
            // Запуск асинхронной операции внутри корутины с обработкой ошибок
            val result = async { fetchData() }

            // Другие операции, выполняемые параллельно
            println("Performing other operations...")

            // Ожидание завершения асинхронной операции и получение результата
            val data = result.await()
            println("Received data: $data")
        } catch (e: Exception) {
            println("Error: ${e.message}")
        }
    }
}

Это лишь основы работы с корутинами в Kotlin. Корутины предоставляют мощные инструменты для управления асинхронными операциями, и их использование существенно улучшает читаемость и поддерживаемость асинхронного кода.