如何开始评估冷IObservable

时间:2016-01-21 18:15:54

标签: c# system.reactive observable

我想,只要对它们进行订阅,就会评估冷的IObservable,就像从Observable.Create返回的那样。我订了。 IObservable没有评估。

class Program
{
    static IObservable<int> HotSource()
    {
        return Observable.Generate<int, int>(0, x => x <= 100, x => x + 1, x => x);
    }
    static IObservable<int> ColdSource()
    {
        return Observable.Create<int>(subscriber => () =>
        {
            for (int i = 0; i <= 100; ++i)
            {
                subscriber.OnNext(i);
            }
        });
    }
    static void Process(IObservable<int> numbers)
    {
        numbers
            .Take(15)
            .Subscribe(Console.WriteLine);
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Hot");
        Process(HotSource());
        Console.WriteLine("Cold");
        Process(ColdSource());
        Console.WriteLine("End");
        Console.ReadLine();
    }
}

1 个答案:

答案 0 :(得分:3)

您的Create方法已关闭。这将有效:

Action

你写的方式,你返回了一个 static void Main(string[] args) { Console.WriteLine("Hot 1"); var hotSource = HotSource(); Process(hotSource); Thread.Sleep(TimeSpan.FromSeconds(2)); Console.WriteLine("Hot 2"); Process(hotSource); Console.ReadLine(); } ,这是在取消订阅时发生的。您希望代码在订阅时发生。

顺便说一下,你的'热'观察不是很热。我不知道这对你有什么影响。你可以在这段代码中看到:

hotSource

如果subset真的很热,每个数字只打印一次,或者同时打印(1,1,2,2等等)。