سؤال

I have the following code

 static void Main(string[] args)
        {
            //var source = BlockingMethod();
            var source2 = NonBlocking();
            source2.Subscribe(Console.WriteLine);
            //source.Subscribe(Console.WriteLine);
            Console.ReadLine();

        }
            private static IObservable<string> BlockingMethod()
            {
              var subject = new ReplaySubject<string>();
              subject.OnNext("a");
              subject.OnNext("b");
              subject.OnCompleted();
              Thread.Sleep(1000);
              return subject;
            }
            private static IObservable<string> NonBlocking()
            {
                return Observable.Create<string>(
                    observable =>
                        {
                            observable.OnNext("c");
                            observable.OnNext("d");
                            observable.OnCompleted();
                            //Thread.Sleep(1000);

                            var source = BlockingMethod();
                            source.Subscribe(Console.WriteLine);

                            return Disposable.Create(() => Console.WriteLine("Observer has unsubscribed"));
                            //or can return an Action like
                            //return () => Console.WriteLine("Observer has unsubscribed");
                        });
            }
        }

which prints

c
d
Observer has unsubscribed
a
b

Can anyone help me get the flow of the control in the program. I did try reading the Call Stack etc..but could not understand everything.

EDIT Why do i get the above output(which i assume is right) instead of

 c 
 d 
 a 
 b 
 Observer has unsubscribed

لا يوجد حل صحيح

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top