RxJava:使用 'first' 运算符时抛出 IllegalArgumentException

RxJava: throw IllegalArgumentException when use 'first' operator

当我使用 Observable.first() 运算符时,我收到一个 IllegalArgumentException 消息 "Sequence contains too many elements"。

这里是可以重现异常的简化测试代码:

Subject<Integer, Integer> subject = BehaviorSubject.create();

subject.first()
       .subscribe(integer -> subject.onNext(1));

subject.onNext(0);

这些代码是从一个非常复杂的真实项目中提取出来的,我认为我不能轻易解释为什么我需要做这个奇怪的事情。

所以我只想问一个问题: 这是 RxJava 的错误还是我自己使用不正确?

如果用法不正确,我想我需要重写逻辑以避免这些代码。

非常感谢。

known bug 带有 take 运算符(由 first 使用)存在重入问题,下一个版本 1.0.15 将包含此修复程序。抱歉,上面没有预计到达时间。

顺便说一下,如果没有这个错误,你为什么要在你的代码中做这个事情?你想向其他订阅者发出信号吗?

编辑

解决方法:

任何进行序列化的运算符都可以用于解决该错误。也许最简单的方法是使用 BehaviorSubject.create().toSerialized().