Какие основные классы существуют в Kotlin Coroutines?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Основные классы и концепции в Kotlin Coroutines:
-
CoroutineScope: Определяет жизненный цикл корутин, запущенных внутри него. Позволяет отменить все дочерние корутины. -
Job: Представляет собой хэндл к корутине. Позволяет отслеживать её состояние, дождаться завершения, отменить. -
Deferred: Специальный типJob, представляющий значение, которое будет доступно позже. Используется для асинхронных вычислений, возвращающих результат. Результат можно получить с помощью функции.await(). -
Dispatcher: Определяет поток или пул потоков, в котором выполняется корутина. Основные диспетчеры:Dispatchers.Default: Оптимизирован для CPU-интенсивных задач. Использует общий пул потоков.Dispatchers.IO: Оптимизирован для I/O-операций (сеть, диск). Использует подходящее количество потоков.Dispatchers.Main: Основной поток UI. Для обновления UI. Доступен на платформе Android и других с соответствующей зависимостью.Dispatchers.Unconfined: Запускает корутину в текущем потоке, но возобновляет её в любом потоке, который возобновил suspending-функцию.
-
Suspending function: Функция, которая помечена ключевым словомsuspendи может быть приостановлена и возобновлена позже. Может вызывать другие suspending-функции. -
runBlocking: Блокирует текущий поток до завершения всех корутин в его области видимости. Используется в основном для тестирования и в мейнах. -
launch: Запускает новую корутину без блокировки текущего потока и возвращаетJob. -
async: Запускает новую корутину без блокировки текущего потока и возвращаетDeferred.
Пример использования:
// Пример использования CoroutineScope, launch и Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Создание CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Запуск корутины в IO диспетчере
val job: Job = scope.launch {
// Выполнение сетевого запроса или другой I/O операции
delay(1000) // Имитация работы
println("Coroutine finished in ${Thread.currentThread().name}")
}
// Дождаться завершения корутины
job.join()
println("Main function finished")
}
// Пример использования async и Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Дождаться результата
val result = deferredSum.await()
println("Result is: $result")
}