我需要结合两个可观察变量,它们通常一个接一个地产生值。第一个序列(我们称其为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---------

关于c# - 有条件地结合两个时移观测值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29591130/

10-17 00:21