【发布时间】:2013-07-28 17:28:56
【问题描述】:
我有一个IObservable<IObservable<T>>,其中每个内部IObservable<T> 是一个值流,后跟一个最终的OnCompleted 事件。
我想将其转换为IObservable<IEnumerable<T>>,这是一个由任何未完成的内部流中的最新值组成的流。每当从内部流之一生成新值(或内部流过期)时,它应该生成一个新的IEnumerable<T>
最容易用大理石图表示(我希望它足够全面):
input ---.----.---.----------------
| | '-f-----g-|
| 'd------e---------|
'a--b----c-----|
result ---a--b-b--c-c-c-e-e-e---[]-
d d d e f g
f f
([] 是空的IEnumerable<T> 而-| 代表 OnCompleted)
您可以看到它有点类似于CombineLatest 操作。
我一直在玩 Join 和 GroupJoin 无济于事,但我觉得这几乎肯定是前进的正确方向。
我想在这个运算符中使用尽可能少的状态。
更新
我已更新此问题,不仅包括单值序列 - 结果 IObservable<IEnumerable<T>> 应仅包括每个序列的最新值 - 如果序列未产生值,则不应包括在内。
【问题讨论】:
-
显然你需要一些状态。
-
@LasseV.Karlsen 你能解释一下原因吗?
-
没有状态是不可能的,因为根据定义,操作员需要跟踪每个内部序列,直到它完成。
-
您昨天的解决方案只需稍作调整即可工作。如果你能重新发布它,我会告诉你调整。
-
@Brandon - 我已取消删除我相信您的意思的解决方案。感谢您的帮助,非常感谢
标签: c# system.reactive