예제 #1
0
        public static void Run()
        {
            var sensorReading = new BehaviorSubject <double>(-1.0);

            sensorReading.Inspect("sensor");
            sensorReading.OnNext(0.99);
        }
예제 #2
0
        static void MainCS(string[] args)
        {
            // CombineLatest

            var mechanical = new BehaviorSubject <bool>(true);
            var electrical = new BehaviorSubject <bool>(true);
            var electronic = new BehaviorSubject <bool>(true);

            mechanical.Inspect("mechanical");
            electrical.Inspect("electrical");
            electronic.Inspect("electronic");

            Observable.CombineLatest(mechanical, electrical, electronic)
            .Select(values => values.All(x => x))
            .Inspect("Is the system OK?");

            mechanical.OnNext(false);

            var digits  = Observable.Range(0, 10);
            var letters = Observable.Range(0, 10).Select(x => (char)('A' + x));

            letters.Zip(digits, (letter, digit) => $"{letter}{digit}")
            .Inspect("Zip");

            // And returns Pattern<T1, T2> whose properties are internal
            var punctuation = "!@#$%^&*()".ToCharArray().ToObservable();

            Observable.When( // Plan<> and all that
                digits
                .And(letters)
                .And(punctuation)
                .Then((digit, letter, symbol) => $"{digit}{letter}{symbol}")
                )
            .Inspect("And-Then-When");
        }
예제 #3
0
        public static void Main(string[] args)
        {
            var mechanical = new BehaviorSubject <bool>(true);
            var electrical = new BehaviorSubject <bool>(true);
            var electronic = new BehaviorSubject <bool>(true);

            mechanical.Inspect("Mechanical");
            electrical.Inspect("Electrical");
            electronic.Inspect("Electronic");

            Observable.CombineLatest(mechanical, electrical, electronic).Select(values => values.All(x => x))
            .Inspect("Is System OK?");

            mechanical.OnNext(false);


            var digits      = Observable.Range(0, 10);
            var letters     = Observable.Range(0, 10).Select(x => (char)('A' + x));
            var punctuation = "!@#$%^&*()".ToCharArray().ToObservable();

            letters.Zip(digits, (letter, digit) => $"{letter}{digit}").Inspect("Zip");

            Observable.When(
                digits.And(letters).And(punctuation).
                Then(((digit, letter, symbol) => $"{digit}{letter}{symbol}"))
                ).Inspect("And-Then-When");


            var s1 = Observable.Range(1, 3);
            var s2 = Observable.Range(4, 3);

            s1.Concat(s2).Inspect("Concat");
            s1.StartWith(2, 1, 0).Inspect("StartWith");


            var seq1 = new Subject <int>();
            var seq2 = new Subject <int>();
            var seq3 = new Subject <int>();

            seq1.Amb(seq2).Amb(seq3).Inspect("Amb");

            seq2.OnNext(23);
            seq1.OnNext(1, 2, 3);
            seq2.OnNext(10, 20, 30);
            seq3.OnNext(100, 200, 300);

            var foo = new Subject <long>();
            var bar = new Subject <long>();
            var baz = Observable.Interval(TimeSpan.FromSeconds(0.5)).Take(5);

            foo.Merge(bar).Merge(baz).Inspect("Merge");

            foo.OnNext(100);
            Thread.Sleep(1000);
            bar.OnNext(10);
            Thread.Sleep(1000);
            foo.OnNext(1000);
            Thread.Sleep(1000);
        }
예제 #4
0
        public static void Main(string[] args)
        {
            var sensorReader = new BehaviorSubject <double>(-1.0);

            sensorReader.Inspect("Sensor");
            sensorReader.OnNext(0.99);
            sensorReader.OnCompleted();
        }
예제 #5
0
        static void WithBehaviourSubject()
        {
            var market = new BehaviorSubject <float>(1);

            market.Inspect("market");
            market.OnNext(2);
            market.OnCompleted();
        }
예제 #6
0
        static void Main(string[] args)
        {
            var sensorReading = new BehaviorSubject <double>(-1.0);

            //到这一步的时候,就是默认值-1
            sensorReading.Inspect("sensor");

            sensorReading.OnNext(0.99);
            sensorReading.OnCompleted();
        }
        public static void Sequence_Combinators()
        {
            // CombineLatest
            var mechanical = new BehaviorSubject <bool>(true);
            var electrical = new BehaviorSubject <bool>(true);
            var electronic = new BehaviorSubject <bool>(true);

            mechanical.Inspect("mechanical");
            electrical.Inspect("electrical");
            electronic.Inspect("electronic");

            Observable.CombineLatest(mechanical, electrical, electronic)
            .Select(values => values.All(x => x))
            .Inspect("Is the system OK?");

            mechanical.OnNext(false);
            PressAnyKey();


            var digits  = Observable.Range(0, 10);
            var letters = Observable.Range(0, 10).Select(x => (char)('A' + x));

            letters.Zip(digits, (letter, digit) => $"{letter}{digit}")
            .Inspect("Zip");

            // And returns Pattern<T1, T2> whose properties are internal
            var punctuation = "!@#$%^&*()".ToCharArray().ToObservable();

            Observable.When(             // Plan<> and all that
                digits
                .And(letters)
                .And(punctuation)
                .Then((digit, letter, symbol) => $"{digit}{letter}{symbol}")
                )
            .Inspect("And-Then-When");
            PressAnyKey();


            // Concat merges all the sequences into one
            var s1 = Observable.Range(1, 3);
            var s2 = Observable.Range(4, 3);

            s2.Concat(s1).Inspect("Concat");

            // Repeat repeats the sequence as often as is necessary
            s1.Repeat(3).Inspect("Repeat");

            s1.StartWith(2, 1, 0).Inspect("StartWith");
            PressAnyKey();


            // Amb(iguous)
            // will return a value from the sequence that first produces a value
            // will ignore values from all other sequences
            var seq1 = new Subject <int>();
            var seq2 = new Subject <int>();
            var seq3 = new Subject <int>();

            seq1.Amb(seq2).Amb(seq3).Inspect("Amb");
            seq1.OnNext(1);             // comment this out
            seq2.OnNext(2);
            seq3.OnNext(3);
            seq1.OnNext(1);
            seq2.OnNext(2);
            seq3.OnNext(3);
            seq1.OnCompleted();
            seq2.OnCompleted();
            seq3.OnCompleted();
            PressAnyKey();


            // Merge pairs up values from multiple sequences
            var foo = new Subject <long>();
            var bar = new Subject <long>();
            var baz = Observable.Interval(TimeSpan.FromMilliseconds(500)).Take(5);

            foo.Merge(bar).Merge(baz).Inspect("Merge");

            foo.OnNext(100);
            Thread.Sleep(1000);
            bar.OnNext(10);
            Thread.Sleep(1000);
            foo.OnNext(1000);
            Thread.Sleep(1000);
        }
        public static void Main_CS(string[] args)
        {
            // Combine latest
            var mechanical = new BehaviorSubject <bool>(true);
            var electrical = new BehaviorSubject <bool>(true);
            var electronic = new BehaviorSubject <bool>(true);

            mechanical.Inspect("mechanical");
            electrical.Inspect("electrical");
            electronic.Inspect("electronic");

            Observable.CombineLatest(mechanical, electrical, electronic)
            .Select(values => values.All(x => x))
            .Inspect("Is the system ok?");

            mechanical.OnNext(false);

            Console.ReadLine();

            // Zip
            var digits  = Observable.Range(0, 10);
            var letters = Observable.Range(0, 10)
                          .Select(x => (char)('A' + x));

            var zip = letters.Zip(digits, (letter, digit) => $"{letter}{digit}");

            zip.Inspect("zip");

            Console.ReadLine();

            // And combine with Observable.When
            var passwords = "!@#$%^&*()_+".ToCharArray().ToObservable();
            var and       = Observable.When(passwords.And(letters).And(digits)
                                            .Then((digit, letter, symbol) => $"{digit}{letter}{symbol}")
                                            );

            and.Inspect("and");
            Console.ReadLine();

            // Concat, Repeat, Start With
            var s1 = Observable.Range(1, 3);
            var s2 = Observable.Range(4, 3);

            s1.Concat(s2).Repeat(2).StartWith(-1, 0).Inspect("Concat + repeat + StartWith (-1, 0)");

            Console.ReadLine();

            // Amb: emit all of the items from only first Observable
            // discard others
            var seq1 = new Subject <int>();
            var seq2 = new Subject <int>();
            var seq3 = new Subject <int>();

            var amb = seq1.Amb(seq2).Amb(seq3);

            amb.Inspect("amb");

            seq3.OnNext(0);              // result 0 7 8 9

            seq1.OnNext(1, 2, 3);
            seq2.OnNext(4, 5, 6);
            seq3.OnNext(7, 8, 9);

            // Merge
            var foo = new Subject <long>();
            var bar = new Subject <long>();
            var baz = Observable.Interval(TimeSpan.FromSeconds(0.5)).Take(5);

            foo.Merge(bar).Merge(baz).Inspect("Merge");

            foo.OnNext(100);
            Thread.Sleep(1000);
            bar.OnNext(10);
            Thread.Sleep(1000);
            foo.OnNext(1000);
            Thread.Sleep(1000);
        }