корутина — легковесная единица выполнения, которой управляет CoroutineScope запуск с помощью launch — возвращает Job и подходит для задач, которым не нужен результат запуск посредством async — возвращает Deferred и применяется для задач, результат которых требуется получить создание coroutine через runBlocking — блокирует текущий поток, что особенно полезно в основном потоке при тестировании применение withContext для смены контекста выполнения или потока использование различных CoroutineDispatcher (Dispatchers.Default, IO, Main) для управления потоком использование GlobalScope для глобального жизненного цикла (обычно не рекомендуется)
Какими способами запускают корутины в Kotlin?
корутина — легковесная единица выполнения, которой управляет CoroutineScope запуск с помощью launch — возвращает Job и подходит для задач, которым не нужен результат запуск посредством async — возвращает Deferred и…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Какими способами запускают корутины в Kotlin?
- корутина — легковесная единица выполнения, которой управляет CoroutineScope
- запуск с помощью launch — возвращает Job и подходит для задач, которым не нужен результат
- запуск посредством async — возвращает Deferred и применяется для задач, результат которых требуется получить
- создание coroutine через runBlocking — блокирует текущий поток, что особенно полезно в основном потоке при тестировании
- применение withContext для смены контекста выполнения или потока
- использование различных CoroutineDispatcher (Dispatchers.Default, IO, Main) для управления потоком
- использование GlobalScope для глобального жизненного цикла (обычно не рекомендуется)
Способ запуска выбирают по контексту и задаче: fire-and-forget — через launch, получение вычисленного результата — через async, блокирующий вызов — через runBlocking, смена потока — через withContext.
Подробный ответ
Основной ответ
В Kotlin корутину запускают несколькими способами — выбор зависит от контекста и поставленной задачи. Основными вариантами из библиотеки kotlinx.coroutines считаются функции launch, async и runBlocking. С их помощью можно гибко управлять жизненным циклом корутин, уровнем параллелизма и возвращаемыми значениями.
Ключевые моменты
- Функция launch запускает корутину без ожидания результата и возвращает объект Job, с помощью которого можно отменить выполнение или дождаться его завершения. Такой вариант часто применяют для фоновых операций в UI и backend.
- Функция async запускает корутину и возвращает Deferred — объект, представляющий будущий результат. Это позволяет выполнять вычисления параллельно, а затем получать значение с помощью await().
- Функция runBlocking блокирует текущий поток, запускает в нём корутину и ожидает её завершения. Она полезна в main-модуле и тестах, где нельзя применить suspend.
- Для запуска корутины нужен CoroutineScope — контекст, включающий Job и Dispatcher. Например, можно использовать
GlobalScope.launch { ... }(этот вариант редко рекомендуют из-за глобальной области действия), а лучше —viewModelScope(в Android) или собственный scope. - Чтобы выбрать поток для выполнения кода, указывают Dispatcher:
Dispatchers.IOприменяют для операций ввода-вывода,Dispatchers.Default— для задач с высокой нагрузкой на CPU, аDispatchers.Main— для UI.
Практический контекст
В React Native, Android и backend-сервисах на Kotlin обычно используют viewModelScope.launch либо кастомный CoroutineScope, чтобы запускать корутины безопасно и учитывать жизненный цикл. В тестах применяют runBlocking, позволяющий синхронно дождаться результата корутины. Для многопоточных вычислений часто выбирают async/await, обеспечивая параллельное выполнение с последующим объединением результатов.