private static void TimerTest() { SpeedFaker speedFaker = new SpeedFaker(); IObservable <float> source = Observable.Interval(TimeSpan.FromSeconds(1)) .Select(_ => speedFaker.Generate().Value); // .Select(_ => 10f); var filtered = source .Where(speed => speed > 10); filtered .Subscribe(speed => { Console.BackgroundColor = ConsoleColor.Red; Console.WriteLine($"#{Thread.CurrentThread.ManagedThreadId} ALERT {speed}"); Console.ResetColor(); } ); source // .DistinctUntilChanged() .Subscribe(item => Console.WriteLine($"#{Thread.CurrentThread.ManagedThreadId} Speed {item}")); }
static void Main(string[] args) { // ObserverTest(); // TimerTest(); SpeedFaker speedFaker = new SpeedFaker(); var source = new ReplaySubject <float>(3); source.OnNext(100); source.OnNext(150); source.OnNext(100); source.OnNext(150); source.OnNext(50); source.OnNext(650); source.OnNext(700); source.OnNext(850); source.OnNext(100); source.OnNext(150); source.Subscribe(item => Console.WriteLine($"S1 #{Thread.CurrentThread.ManagedThreadId} {item}")); source.Subscribe(item => Console.WriteLine($"S2 #{Thread.CurrentThread.ManagedThreadId} {item}")); source.OnNext(250); Console.WriteLine("Press any key to exit."); Console.ReadLine(); }