Rx java 行为主体的getValue()的真正含义是什么?

Rx java 行为主体的getValue()的真正含义是什么?,rx-java,rx-android,Rx Java,Rx Android,在API中,它写为“如果存在主题的当前值且主题尚未终止,则返回该主题的当前值。” 但是,在这种情况下,返回哪个值? 也就是说,我想知道getValue()返回订阅和提交的值,或者onNext()调用的值。在您的图表中,subject.onNext(3)只能从不同的线程调用,因为subject.onNext(2)尚未返回。但是,这违反了被动契约,因为您不允许进行重叠调用(onNext/onComplete/onError)。虽然在许多情况下,这种行为不会造成伤害,但rhere是像.seriali

在API中,它写为“如果存在主题的当前值且主题尚未终止,则返回该主题的当前值。”

但是,在这种情况下,返回哪个值?


也就是说,我想知道getValue()返回订阅和提交的值,或者onNext()调用的值。

在您的图表中,
subject.onNext(3)
只能从不同的线程调用,因为
subject.onNext(2)
尚未返回。但是,这违反了被动契约,因为您不允许进行重叠调用(onNext/onComplete/onError)。虽然在许多情况下,这种行为不会造成伤害,但rhere是像
.serialize()
这样的运算符,它们有助于将其退回规范


简而言之,在您的情况下,它是未定义的。

实际上,您会得到3,因为在
BehaviorSubject
中内部保存最新的值是原子的,但否则,重叠调用可能会扰乱对订阅者的发射状态,因此,这确实是未定义的行为。如果没有订阅服务器,则不会造成任何伤害,但如果有机会从同一线程进行并发调用或可重入的下一次调用,则仍然需要使用
.toSerialized()