lifecycleScope.launch {
adapter?.getData()?.let {
val flowable = it.asFlow()
flowable.onEach {
doCompress(it)
}.flatMapConcat {
flow<Unit> {
updateProgressInMain()
}.flowOn(Dispachers.Main)
}.catch {
dismissLoading()
}.flowOn(Dispatchers.IO).collect {
Log.d("Collect", "" + Thread.currentThread())
}
}
}正如上面的代码一样,我不能在控制台中打印“Collect”登录,但是其他代码可以运行良好。但是,当我在onEach期间使用'WithContext()‘而不是flatMapConcat来切换线程时,我可以打印日志。有人能说出发生了什么吗?
发布于 2022-02-03 17:01:18
您将生成一个在flatMapConcat中永远不会发出的空流,因此生成的流也不会发出任何内容。
您的代码对我不太有意义,但是假设您想要做的任务是,对于源LiveData作为流发出的每一项:
doCompress()。显然,doCompress()不返回任何内容。updateProgressInMain()。然后,无论是否失败,都调用dismissLoading()。
那么这个更简单的代码应该可以做到:
adapter?.getData()?.asFlow()?.onEach {
runCatching {
withContext(Dispatchers.IO) {
doCompress(it)
Log.d("Collect", "" + Thread.currentThread())
}
updateProgressInMain()
}
dismissLoading()
}?.launchIn(lifecycleScope)https://stackoverflow.com/questions/70844842
复制相似问题