С помощью какого класса появляется трансформация suspend-функции

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

Ответ

Для трансформации suspend-функций в Java-совместимый код (например, для использования в RxJava или колбэках) используют класс Continuation. Kotlin компилятор автоматически преобразует suspend-функции в конечный автомат с Continuation, который управляет приостановкой и возобновлением корутин.

Пример с suspendCoroutine для ручного управления:

suspend fun fetchData(): String = suspendCoroutine { continuation ->
    someAsyncApi.call(object : Callback {
        override fun onSuccess(result: String) {
            continuation.resume(result)
        }
        override fun onError(error: Throwable) {
            continuation.resumeWithException(error)
        }
    })
}

Здесь continuation позволяет возобновить выполнение корутины после асинхронного вызова.