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()
.
当我使用 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()
.