Ответ
Suspend-функции в Room позволяют выполнять запросы к базе данных в корутинах, избегая блокировки главного потока. Room автоматически переносит такие операции в фоновый поток через собственный Executor.
Пример:
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User) // Выполняется в фоне
}
Ключевые моменты:
- Только suspend-функции могут вызываться из корутин
- Room генерирует код, который обрабатывает suspend корректно
- Избегает ручного управления потоками (например, с RxJava/AsyncTask)
- Нельзя использовать suspend с
@QueryвозвращающимLiveData/Flow(они уже асинхронны)