我需要组合两个通常会一个接一个地产生值的observable。第一个序列(让我们称之为Seq A
)产生的值多于第二个(Seq B
),但通常第一个observable中的一堆值在第二个序列上被一个值所包含。所以基本上我需要从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:我很难明确地解释这个问题,所以请原谅标题。
答案 0 :(得分:1)
我会抓住这个。鉴于可观察量A
和B
,我认为这样做可以解决问题:
// 1500 millisecond timeout to be used on observable B.
TimeSpan timeout = TimeSpan.FromMilliseconds(1500);
var result =
A
.Select(a =>
B
.Timeout(timeout)
.Materialize()
.Take(1)
.Select(b => b.Kind == NotificationKind.OnNext ? b.Value : a))
.Switch();
这个大理石图应该如下所示:
<-1500ms->Timeout
SeqA |--------a0--------------a1-a2--------a3---------------------
SeqB |b0--------b1----b2-----------b3-----------------------------
Output |----------b1-----------------b3------------------a3---------