Выбор ответа Junior Корутины и structured concurrency спрашивают часто обновлено
Переносит ли suspend код в другой поток
Вопрос
Что означает модификатор suspend у функции?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Может приостановить корутину, не блокируя поток. suspend лишь разрешает приостановку: компилятор добавляет параметр Continuation и делает из функции машину состояний.
Варианты ответа
- Функция всегда выполняется в фоновом потоке IO
- Функция выполняется асинхронно и возвращает
Deferred - Функция блокирует поток до получения результата
- Может приостановить корутину, не блокируя потокправильный ответ
Разбор
suspend лишь разрешает приостановку: компилятор добавляет параметр Continuation и делает из функции машину состояний. В каком потоке она выполняется, решает диспетчер вызывающей корутины или явный withContext. Поэтому suspend-функция с тяжёлыми вычислениями внутри может заморозить UI, если её вызвали на Main. Deferred возвращает билдер async, а блокирует поток runBlocking.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.