Saturday, March 12, 2016

Rx Rundown


Package Rx-Main, Rx-WPF( bring in System.Reactive.Windows.Threading)
Scheduler.Immediate(immediate sync no queue run) .CurrentThread (Queued, single threaded), .NewThread(many thread), DispatcherSheduler, 
new EventLoopScheduler() (a separate thread as Message Pump, not static property as above) 
Thread/TaskPoolScheduler=TaskScheduler.Default (Two background Thread, all other are foreground)
SubscribeOn/ObserveOn(scheduler.NewThread)--SubOn ignore NewThread or ThreadPool just pick one,ObseOn multi and in order.
WPF/WF SubscribeOn to compute, ObserveOn to update

Setup
            var q = from t in Enumerable.Range(1, 100) select t;

            //Queryable  -- need observer
            var qab = q.AsQueryable();  //System.Linq.IQueryable
            qab.Subscribe(Observer.Create(F), Scheduler.Immediate);

            //Observable
            var obs=q.ToObservable(Scheduler.ThreadPool);  //System.IObservable.
            obs.ObserveOn(DispatcherSynchronizationContext.Current).Subscribe(F); // SyncCtx obsolete
            Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(i=>F((int)i));

            // ObservableExtensions in Core.dll, DispatcherScheduler in Rx-Wpf System.Reactive.Windows.Threading
            obs.ObserveOn(DispatcherScheduler.Current).Subscribe(F);

Observable.Using(()=>new StreamReader(""), sr => sr.ReadToEnd().ToObservable());// using need input IDis
Observable.Using(() => Disposable.Empty, d => Observable.Range(1, 100)); //fool using by Empty
.Finally(()=>{manualresetevent.Set()}; //block to join bg threadpool. .Catch .Timer .TimeStamp .Timeout need Catch, .Throttle=Buffer
.Scan=Aggregate but running finite .Buffer vs. .Window= List vs.IObs .Do .Count() is obs
 Observable.Create(obsr => { obsr.OnNext(1); obsr.OnCompleted(); return () => { }; }); //Disposable.Empty
Observable.Generate(init,state=>CanContinue,MoveNext,Getresult,ThreadPool,
.Publish .Connect .RefCount() hot-cold-auto cleanup.
.FromEventPatten(=>Ink,prop.Changed+=h,Changed=-h).Where(..)
 Observable.FromAsyncPattern(sm.BeginRead, sm.EndRead); obsolete use await task 

Rx Hot/Cold obs--- Interval is cold since each sub see different, But if Obs.publish then all sub
next Obs.connect will have all Subs see same data => hot

No comments:

Post a Comment