将一个observable与另一个可观察的

时间:2017-02-08 21:20:24

标签: c# .net system.reactive observable

我有2个可观察量AB

我想生成C 只有在A发出时才会发出,其中包含刚刚在A中推送的值和{{{}}中的最新值1}}。

1 个答案:

答案 0 :(得分:1)

在这里,我认为这样做

让我们说 A 是一个可观察到的char,而 B 是一个Observable of int。

每隔3秒打一次电话。 B每隔1秒呼叫一下。

从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);
        }
    }