Для чего нужно обозначать функцию suspend в Room

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

Ответ

Suspend-функции в Room позволяют выполнять запросы к базе данных в корутинах, избегая блокировки главного потока. Room автоматически переносит такие операции в фоновый поток через собственный Executor.

Пример:

@Dao
interface UserDao {
    @Insert
    suspend fun insert(user: User) // Выполняется в фоне
}

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

  • Только suspend-функции могут вызываться из корутин
  • Room генерирует код, который обрабатывает suspend корректно
  • Избегает ручного управления потоками (например, с RxJava/AsyncTask)
  • Нельзя использовать suspend с @Query возвращающим LiveData/Flow (они уже асинхронны)