Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: корутина

Как suspendCancellableCoroutine помогает работать с колбэками?

Этот вопрос проверяет понимание, как suspendCancellableCoroutine преобразует асинхронные колбэки в последовательный suspend-код.

Короткий ответ

suspendCancellableCoroutine приостанавливает корутину и предоставляет Continuation, который можно возобновить вручную. Это позволяет обернуть API с колбэками в suspend-функцию, делая код линейным. Если корутина отменяется, можно корректно освободить ресурсы.

Длинный ответ

Многие асинхронные библиотеки (например, Retrofit, Firebase) используют колбэки, но в корутинах удобнее работать с suspend-функциями. suspendCancellableCoroutine помогает преобразовать колбэк в последовательный код.

Пример: обёртка для callback-based API

suspend fun fetchData(): String = suspendCancellableCoroutine { continuation ->
    someApi.call(object : Callback {
        override fun onSuccess(result: String) {
            continuation.resume(result)  // Возобновляем корутину с результатом
        }
        override fun onFailure(error: Throwable) {
            continuation.resumeWithException(error)  // Пробрасываем ошибку
        }
    })

    // Если корутина отменена, отменяем вызов API
    continuation.invokeOnCancellation { 
        someApi.cancel() 
    }
}

Как это работает:

  1. Корутина приостанавливается при вызове suspendCancellableCoroutine.

  2. Мы получаем continuation, который можно возобновить (resume) или завершить с ошибкой (resumeWithException).

  3. Если корутина отменяется, срабатывает invokeOnCancellation, где можно отменить операцию.

Преимущества:

  • Код выглядит как последовательный, без вложенных колбэков.

  • Поддержка отмены корутин.

  • Интеграция с существующими API.

Вывод:
suspendCancellableCoroutine — это мост между старыми колбэк-API и современными корутинами, делая асинхронный код чище и управляемее.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Kotlin

    Kotlin

Ключевые слова

#корутина

Подпишись на Android Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.