关于Rx的CombineLatest和默认初始值

时间:2015-05-29 22:38:09

标签: .net f# system.reactive

给定2种类型AB,默认值为d(A)& d(B)。 和2个主题:

let sa = new Subject<A>()
let sb = new Subject<B>()

f

类型的函数A -> B -> C

我创建了这个observable:

let o = Observable.CombineLatest(sa, sb, f)

但是,我需要o根据d(A)&amp;生成初始值。 d(B)。文档说,一旦两个主题产生了他们的第一个输出,CombineLatest只会产生它的第一个输出。

我有2种方法,但我不知道哪种方法可行/哪种方法最佳,或者我是否遗漏了一些已经满足我需要的运算符。

我提出的第一种方法是在相关订阅OnNext后,使用默认值手动调用sasbo

我的第二种方法是使用BehaviorSubject而不是普通Subject s,使用初始值创建它们,并希望CombineLatest将其用作第一个输出。

感谢阅读。

附录 我已经确认第二种方法有效,但我仍然不知道在这种情况下引入BehaviorSubject而不是普通Subject是否最佳。

1 个答案:

答案 0 :(得分:14)

如何使用public static Observable<T> StartWithDefault(this Observable<T> observable) { return observable.StartWith(default(T)); }

sa.StartWithDefault().CombineLatest(sb.StartWithDefault(), f)

然后:

HTTPs urls