我需要组合两个通常一个接一个产生值的可观察值。第一个序列(我们称它为 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:我很难把问题解释清楚,所以请原谅这个标题。
最佳答案
我会尝试一下。给定 observables 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---------
关于c# - 有条件地组合两个时移观测值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591130/