Ответ
Coroutines в Kotlin позволяют писать асинхронный код в последовательном стиле, избегая callback hell. Основные моменты:
- Запуск корутин – через
launch(fire-and-forget) илиasync(с возвратом результата):
viewModelScope.launch {
val data = async { fetchData() }.await()
updateUI(data)
}
-
Контексты –
Dispatchers.IOдля сетевых/дисковых операций,Dispatchers.Mainдля UI. -
Отмена – автоматическая при отмене родительской корутины или через
job.cancel(). -
Обработка ошибок – через
try/catchилиCoroutineExceptionHandler. -
Потоки – интеграция с
Flowдля реактивных данных.
Пример сетевого запроса:
viewModelScope.launch {
try {
val result = withContext(Dispatchers.IO) { api.getData() }
_state.value = Success(result)
} catch (e: Exception) {
_state.value = Error(e)
}
}
Использовал для: фоновых задач, параллельных запросов, работы с Room/Retrofit.