Ответ
В корутинах есть несколько билдеров для запуска корутин:
launch- запускает корутину без результата (fire-and-forget)
scope.launch {
// выполнение кода
}
async- запускает корутину с возможностью получения результата черезawait()
val deferred = scope.async {
// вычисление
result
}
val result = deferred.await()
runBlocking- блокирует текущий поток до завершения корутины (используется в тестах и main())
runBlocking {
// синхронный код
}
withContext- переключает контекст выполнения
withContext(Dispatchers.IO) {
// код в IO потоке
}
coroutineScope- создает новую область видимости для корутин
coroutineScope {
launch { /* ... */ }
}