Выбор ответа Junior Корутины и structured concurrency спрашивают часто обновлено

Переносит ли suspend код в другой поток

Вопрос

Что означает модификатор suspend у функции?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Может приостановить корутину, не блокируя поток. suspend лишь разрешает приостановку: компилятор добавляет параметр Continuation и делает из функции машину состояний.

Варианты ответа

  1. Функция всегда выполняется в фоновом потоке IO
  2. Функция выполняется асинхронно и возвращает Deferred
  3. Функция блокирует поток до получения результата
  4. Может приостановить корутину, не блокируя потокправильный ответ

Разбор

suspend лишь разрешает приостановку: компилятор добавляет параметр Continuation и делает из функции машину состояний. В каком потоке она выполняется, решает диспетчер вызывающей корутины или явный withContext. Поэтому suspend-функция с тяжёлыми вычислениями внутри может заморозить UI, если её вызвали на Main. Deferred возвращает билдер async, а блокирует поток runBlocking.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.