Что такое Continuation в Coroutines

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

Ответ

Continuation в Coroutines — это callback-интерфейс, который позволяет возобновить выполнение корутины после приостановки. Он содержит контекст корутины (CoroutineContext) и механизм для передачи результата или исключения.

Пример:

suspend fun fetchData(): String {
    return suspendCoroutine { continuation ->
        someAsyncOperation { result, error ->
            if (error != null) {
                continuation.resumeWithException(error)
            } else {
                continuation.resume(result)
            }
        }
    }
}

Ключевые моменты:

  • resume() — возобновляет выполнение с результатом
  • resumeWithException() — передает исключение
  • Каждый suspend-вызов неявно получает Continuation
  • Компилятор преобразует suspend-функции в машину состояний с Continuation