Ответ
Coroutines требуют специального контекста выполнения, который предоставляется CoroutineScope. Suspend-функции работают внутри этого контекста и могут приостанавливать выполнение без блокировки потока. Обычные функции не имеют доступа к этому механизму.
Пример:
suspend fun fetchData() {
// Можно вызывать корутины, т.к. это suspend-функция
withContext(Dispatchers.IO) { /* ... */ }
}
fun regularFunction() {
// Ошибка: нельзя вызвать корутину напрямую
// withContext(Dispatchers.IO) { ... }
}
Для вызова корутин из обычных функций используйте CoroutineScope.launch или runBlocking.