.net 关于Rx';s组合测试和默认初始值
给定两种类型的.net 关于Rx';s组合测试和默认初始值,.net,f#,system.reactive,.net,F#,System.reactive,给定两种类型的A和B,默认值为d(A)和d(B)。 和2个科目: let sa = new Subject<A>() let sb = new Subject<B>() 但是,我需要o根据d(A)和d(B)生成初始值。文档说,CombineTest只会在两个主题都产生第一个输出后才产生第一个输出 我有两种方法,但我不知道哪种方法有效/哪种方法最好,或者我是否缺少一些已经完成我需要的操作的操作员 我想到的第一种方法是在对o进行相关订阅后,使用默认值手动调用OnNext到s
A
和B
,默认值为d(A)
和d(B)
。
和2个科目:
let sa = new Subject<A>()
let sb = new Subject<B>()
但是,我需要o
根据d(A)
和d(B)
生成初始值。文档说,CombineTest只会在两个主题都产生第一个输出后才产生第一个输出
我有两种方法,但我不知道哪种方法有效/哪种方法最好,或者我是否缺少一些已经完成我需要的操作的操作员
我想到的第一种方法是在对o
进行相关订阅后,使用默认值手动调用OnNext
到sa
和sb
我的第二种方法是使用BehaviorSubject
s而不是普通的Subject
s,用初始值创建它们,并希望CombineTest将其用于第一次输出
谢谢你的阅读
附录
我已经证实了第二种方法是有效的,但我仍然不知道引入
行为主体
而不是简单的主体
是否最适合这种情况。使用StartWith
如何
publicstaticobservestartwithdefault(此可观察){
返回可观察的。StartWith(默认值(T));
}
然后:
实际上有一个
.StartWith
操作,特别是在这种情况下。@FyodorSoikin甚至更好。Thx。当我们谈论这个问题时,在这里提到这一点是多么困难啊!为了“好玩”,这里是StartWith
操作符的源代码:
let o = Observable.CombineLatest(sa, sb, f)
sa.StartWithDefault().CombineLatest(sb.StartWithDefault(), f)