RxJava可能是defaultIfEmpty调度程序错误

问题描述

我在某些设备上发现了defaultIfEmpty的一些怪异行为(不幸的是,我无法在本地复制它……)。

问题是calling database on main thread,逻辑如下,有一个功能

private fun doDatabaSEOrEmpty() {
   return database.queryDataMaybe()
          .defaultIfEmpty(db.createNew())
}

因此,基本上是有一个查询数据库中的对象,如果它不存在,我们就创建它,就这么简单,然后调用如下:

   doDatabaSEOrEmpty()
   .subscribeOn(Schedulers.io())

因此,调用预订于io scheduler方法,对查询的第一次调用始终在适当的线程上,并且大多数情况下defaultIfEmpty也是如此,但是在某些情况下会对其进行调用main thread

很明显,我可以使用switchIfEmpty并在内部明确切换调度程序,但是我很好奇这种情况的发生方式和原因。

如果有人有类似的情况并且知道答案,请赐教:)谢谢!

编辑!

结果很简单,defaultIfEmpty不会从subscribeOn获取调度程序,而是在调用线程上调用

   doDatabaSEOrEmpty()
   .subscribeOn(Schedulers.io())

因此,如果它是在主线程defaultIfEmpty调用的,则将继续main

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)