Пример #1
0
        private static void MergingObservableOfObservables()
        {
            Demo.DisplayHeader("The Merge operator - allows also to merge observables emitted from another observable");

            IObservable <string> texts = ObservableEx.FromValues("Hello", "World");

            texts
            .Select(txt => Observable.Return(txt + "-Result"))
            .Merge()
            .SubscribeConsole("Merging from observable");
        }
Пример #2
0
        private static void ZippingTwoObservables()
        {
            Demo.DisplayHeader("The Zip operator - combines values with the same index from two observables");

            //temperatures from two sensors (in celsius)
            IObservable <double> temp1 = ObservableEx.FromValues(20.0, 21, 22);
            IObservable <double> temp2 = ObservableEx.FromValues(22.0, 21, 24);

            temp1
            .Zip(temp2, (t1, t2) => (t1 + t2) / 2)
            .SubscribeConsole("Avg Temp.");
        }
Пример #3
0
        private static void DelayingEachNotificationIndependently()
        {
            Demo.DisplayHeader("Throttle operator - each notification can be shifted independently by providing observable that signals the delay is over");

            var observable = ObservableEx.FromValues(4, 1, 2, 3);

            observable
            .Timestamp()
            .Delay(x => Observable.Timer(TimeSpan.FromSeconds(x.Value)))
            .Timestamp()
            .RunExample("Independent Delay");
        }
Пример #4
0
        private static void AddToCompositeDisposable()
        {
            Demo.DisplayHeader("AddToCompositeDisposable extensions method - useful for keeping your observable pipeline fluent");

            var compositeDisposable         = new CompositeDisposable();
            IObservable <string> observable = ObservableEx.FromValues("Rx", "For", "The", "Win");

            observable.Where(x => x.Length % 2 == 0)
            .Select(x => x.ToUpper())
            .Subscribe(x => Console.WriteLine(x))
            .AddToCompositeDisposable(compositeDisposable);

            observable.Where(x => x.Length % 2 == 1)
            .Select(x => x.ToLower())
            .Subscribe(x => Console.WriteLine(x))
            .AddToCompositeDisposable(compositeDisposable);
        }
Пример #5
0
        public static void SubscribeOnAndObserveOn()
        {
            Demo.DisplayHeader("using SubscribeOn and ObserveOn together and their effect");

            ObservableEx.FromValues(0, 1, 2, 3, 4, 5)
            .Take(3)
            .LogWithThread("A")
            .Where(x => x % 2 == 0)
            .LogWithThread("B")
            .SubscribeOn(NewThreadScheduler.Default)
            .LogWithThread("C")
            .Select(x => x * x)
            .LogWithThread("D")
            .ObserveOn(TaskPoolScheduler.Default)
            .LogWithThread("E")
            .RunExample("squares by time");
        }
Пример #6
0
        private static void AggreagateResultInAWindow()
        {
            Demo.DisplayHeader("The Window operator - each window is an observable that can be used with an aggregation function");

            var donationsWindow1 = ObservableEx.FromValues(50M, 55, 60);
            var donationsWindow2 = ObservableEx.FromValues(49M, 48, 45);

            IObservable <decimal> donations =
                donationsWindow1.Concat(donationsWindow2.DelaySubscription(TimeSpan.FromSeconds(1.5)));

            var windows = donations.Window(TimeSpan.FromSeconds(1));

            var donationsSums =
                from window in windows.Do(_ => Console.WriteLine("New Window"))
                from sum in window.Scan((prevSum, donation) => prevSum + donation)
                select sum;

            donationsSums.RunExample("donations in shift");
        }
Пример #7
0
        private static void GroupBy()
        {
            var people = ObservableEx.FromValues(
                new Person()
            {
                Gender = Gender.Male, Age = 21
            },
                new Person()
            {
                Gender = Gender.Female, Age = 31
            },
                new Person()
            {
                Gender = Gender.Male, Age = 23
            },
                new Person()
            {
                Gender = Gender.Female, Age = 33
            });

            var genderAge =
                from gender in people.GroupBy(p => p.Gender)
                from avg in gender.Average(p => p.Age)
                select new { Gender = gender.Key, AvgAge = avg };

            genderAge.SubscribeConsole("Gender Age");

            //
            // Grouping with Query Syntax GroupBy clause
            //
            //var genderAge2 =
            //    from p in people
            //    group p by p.Gender
            //    into gender
            //    from avg in gender.Average(p => p.Age)
            //    select new { Gender = gender.Key, AvgAge = avg };
        }