Как отказаться от подписки на потоки сопрограмм сразу после вызова RoomDb

Я пытаюсь запросить базу данных комнаты (действие 1), а затем на основе возвращенных результатов выполнить другое действие с той же таблицей. однако я заметил, что каждый раз, когда я выполняю второе действие, сопрограмма будет запрашивать базу данных (действие 1). но этого не хочу. просто как пример:

Мой ItemDao:

@Query("SELECT * FROM item_table")
fun selectItems():Flow<List<Item>>

@Insert
suspend fun insertItem(item:Item)

например, я хочу сначала выполнить selectItems(), и если список пуст, немедленно вызовите insertItem(item)

fun insertIfListEmpty(item:Item){

    val job=CoroutineScope(IO).launch {
        itemDao.selectItems().collect{
          log.d(TAG,"items collected")
          if (it.isNullOrEmpty()) {
             itemDao.insertItem(item)
          }
        }

    }

}

но после itemDao.insertItem(item) он снова показывает сообщение журнала. даже если я снова вызываю itemDao.insertItem(item) из другого метода, он показывает сообщение журнала. есть ли способ отписаться от сопрограммы сразу после сбора?


person Amin Lotf    schedule 09.09.2020    source источник
comment
Вы можете отменить поток CoroutineScope. [email protected]()   -  person Animesh Sahu    schedule 09.09.2020
comment
Отвечает ли это на ваш вопрос? Отменить сбор потока котлина по сигналу   -  person Animesh Sahu    schedule 09.09.2020
comment
Я не знаю, как использовать этот код   -  person Amin Lotf    schedule 09.09.2020