【发布时间】:2014-04-07 16:49:05
【问题描述】:
我不知道为什么,但是由于某种原因,当使用通过 concat 创建的 observable 时,我总是会得到从我的列表中推送的所有值(按预期工作)。与普通订阅一样,似乎某些值永远不会到达那些订阅了 observable 的人(仅在某些条件下)。
这是我正在使用的两种情况。任何人都可以尝试解释为什么在某些情况下订阅第二个版本时没有收到所有值吗?它们不相等吗?这里的目的是倒带流。有哪些原因可以解释为什么案例 2 失败而案例 1 没有。
此处的重播只是正在进行的流的列表。
案例 1。
let observable =
Observable.Create(fun (o:IObserver<'a>) ->
let next b =
for v in replay do
o.OnNext(v.Head)
o.OnNext(b)
o.OnCompleted()
someOtherObs.Subscribe(next, o.OnError, o.OnCompleted))
let toReturn = observable.Concat(someOtherObs).Publish().RefCount()
案例 2。
let toReturn =
Observable.Create(fun (o:IObserver<'a>) ->
for v in replay do
o.OnNext(v.Head)
someOtherObs.Subscribe(o)
).Publish().RefCount()
【问题讨论】:
-
这两种情况下传递给
Observable.Create的函数是不同的。如果您在两种情况下使用完全相同的函数,您是否也会看到相同的行为? -
@MarkSeemann 见下方评论。
标签: f# system.reactive