Почему можно вызвать coroutine только из suspend функции

«Почему можно вызвать coroutine только из suspend функции» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример:

suspend fun fetchData() { 
    // Можно вызывать корутины, т.к. это suspend-функция
    withContext(Dispatchers.IO) { /* ... */ }
}

fun regularFunction() {
    // Ошибка: нельзя вызвать корутину напрямую
    // withContext(Dispatchers.IO) { ... } 
}

Для вызова корутин из обычных функций используйте CoroutineScope.launch или runBlocking.