我使用handleMInfo.listIncompleted()
和Room从数据库中获取记录,listIncompleted
返回Flow
。
1:我认为代码A会继续运行,当数据库中的记录发生变化时,todo(it)
会一次又一次地启动,对吗?
2:我认为即使在Code B中数据库中的记录发生了变化,todo(it)
只被调用了两次,整个操作也会被取消,对吗?
代码A
val listIncompleted = handleMInfo.listIncompleted()
listIncompleted
.flowOn(Dispatchers.IO)
.collect { todo(it) }
代码B
val listIncompleted = handleMInfo.listIncompleted()
listIncompleted
.flowOn(Dispatchers.IO)
.take(2)
.collect { todo(it) }
1条答案
按热度按时间kpbwa7wx1#
1.这是正确的每次在数据库中添加或更新新记录时,只要流仍然处于活动状态,就会调用
todo(it)
。每当数据库中发生更改时,listIncompleted()函数返回的Flow就会发出值,从而导致collect块为每个新发出的值执行。1.那也是正确的。在Code B中,collect块只会被调用两次,然后流程会被取消。
take()
操作符用于限制流将发出的值的数量。因此,在您的情况下,流将在发出2个值后被取消。