【发布时间】:2015-04-12 15:27:56
【问题描述】:
我需要组合两个通常一个接一个产生值的可观察对象。第一个序列(我们称之为Seq A)比第二个序列(Seq B)产生更多的值,但通常来自第一个可观察对象的一堆值后面跟着第二个值。所以基本上我需要从Seq A 的最新值和Seq B 的最新值中产生一个值。
但是,第二个序列可能不会产生值。在这种情况下,组合序列仍应产生一个值;当来自SeqA 的值和一些超时Seq B 仍然没有产生值时,我需要从Seq A 产生一个值。
大理石图应该是这样的:
<-> Timeout No timeout
Seq A | a1-----------a2a3---------------a4a5-a6---------
Seq B | --b1----------------------------------b3--------
Output | ---x1--------------x2------------------x3-------
^ - I need this ^ - And this
Output 基本上是值的某种组合。
PS:我很难简洁地解释这个问题,所以请原谅标题。
【问题讨论】:
-
那么,用更通俗的话来说——如果序列 A 不能以足够快的速度生成一个值作为故障保护,您想从序列 B 中生成一个值吗?所以 A 获得了更高的优先级,但如果它在超时时间内没有产生值,那么选择 A 中的值?
-
@Benjamin Gruenbaum:差不多,但反过来。 B 具有优先级,A 是后备。
-
没有足够的规范来保证解决这个问题:尚不清楚 x 依赖于 a 和 b 的哪些值;目前尚不清楚在超时期间产生后续值如何影响 x。我认为您是说来自 a 的值开始超时,在超时或 ab 元素到达时,a 的最新值和可能的 b(其中 b 可能没有值)被输入结果选择器以产生 x?在那一点上,a 的下一个值开始一个新的超时?如果有 a b 而没有 a - 会立即将 b 输入结果选择器吗?
-
呃,我不小心删除了我的评论。那是:@JamesWorld:对不起,我应该提供更多信息。假设 B 产生一个值,这个值和 A 的最后一个值产生输出。但是如果发生超时,我仍然需要单独从 A 产生输出。该输出是使用副作用计算的,该副作用取决于 A 和 B 具有值或仅 A 的值这一事实。如果只有 B 提供,那么这个值就足够了所以本质上你的假设是正确的。
-
@JamesWorld:A 的每个值都会重置超时,直到它可以与 B 值组合或产生没有 B 的结果。它的行为应该像使用
Sample()。
标签: c# system.reactive