В чем разница между suspend и обычной функцией

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

Ответ

suspend функции предназначены для работы с корутинами и могут быть вызваны только из другой suspend функции или корутины (например, внутри launch или async). Они могут приостанавливать выполнение без блокировки потока, что позволяет эффективно работать с асинхронными операциями (сетевые запросы, БД и т.д.).

Обычные функции выполняются синхронно и блокируют поток до завершения. Они не могут вызывать suspend функции напрямую.

Пример:

suspend fun fetchData(): String {
    delay(1000) // Неблокирующая задержка
    return "Data"
}

fun regularFunction(): String {
    Thread.sleep(1000) // Блокирует поток
    return "Data"
}