将一个可观察值与另一个可观察值的最新值相结合

Combining an observable with the latest value of another observable

我有 2 个可观察对象 AB

我想生成 C,它 仅在 A 发出 时发出,结合刚刚推入 A 的值,以及最B.

中的最新值

给你,我想这样就可以了

假设 A 是 char 的可观察对象,B 是 int 的可观察对象。

A 每 3 秒调用一次 next。 B 每 1 秒调用一次 next。

从 A 取下一个,B 的当前最新。

    static void Main(string[] args)
    {            
        var chrObservable = CharEnumerable().ToObservable();
        var timer1 = Observable.Interval(TimeSpan.FromSeconds(3));

        var chrAtInterval = timer1.Zip(chrObservable, (ts,c) => c);

        var numberObservable = NumEnumerable().ToObservable();
        var timer2 = Observable.Interval(TimeSpan.FromSeconds(1));

        var numberAtInterval = timer2.Zip(numberObservable, (ts,n) => n);

        chrAtInterval.WithLatestFrom(numberAtInterval,(c, n) => new{c,n})
               .Subscribe(pair => Console.WriteLine(pair.c + ":" + pair.n));

        Console.WriteLine("Waiting...");
        Console.ReadKey();
    }

    private static IEnumerable<int> NumEnumerable()
    {
        for (int i = 0; i < 10; i++)
        {
            yield return i;
        }
    }

    private static IEnumerable<char> CharEnumerable()
    {
        for (int i = 0; i < 10; i++)
        {
            yield return (char)(i + 65);
        }
    }