有条件地组合两个时移观测值

Combining two time-shifted observables conditionally

我需要组合两个通常一个接一个产生值的观察值。第一个序列(我们称之为 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: 问题不好解释,请见谅。

我会尝试一下。给定可观察量 AB 那么我认为这会成功:

// 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---------