我需要结合两个可观察变量,它们通常一个接一个地产生值。第一个序列(我们称其为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
,那么我认为这可以解决问题:
// 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/