• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Whenever you search in PBworks or on the Web, Dokkio Sidebar (from the makers of PBworks) will run the same search in your Drive, Dropbox, OneDrive, Gmail, Slack, and browsed web pages. Now you can find what you're looking for wherever it lives. Try Dokkio Sidebar for free.


Reactive Extensions

Page history last edited by Chris Bilson 11 years, 11 months ago




  • nuget i Rx-All 
  • generators: Observable.Create<int>(...)
  • adapters:
    • Observable.FromEvent<MouseEventArgs>(...)
    • .FromEventPattern<MouseEventArgs>(frm, "MouseMove") <- uses reflection to find the event
  • composition
    • frm.MouseMove += (_, args) =>  { if (this) ... else if (that) ... } <- not composable
    • Observable.FromEventPattern<>(...).Select(...) <-  specific events, logic not in action, actions composable
    • crossing streams: Observable.___<>(...).SelectMany(evt => ...) 
  • schedulers
    • Observable.Timer(5.Seconds()) <- fires one event in 5 seconds
    • Which timer? Up to you. Scheduler abstraction. 
      • context + policy + clock
      • distrib. process, you might use remote clock
      • IScheduler <- mostly don't need to worry about. Use defaults: Observable.Range(1, 10, Scheduler.ThreadPool)
      • Scheduler.Immediate, Scheduler.Dispatcher.... 
      • Some of the schedulers are in different assemblies (if they depend on winforms, or whatever) for portability 
      • TestScheduler (see below) 
  • testing
    • time problem
      • want a virtual clock
      • scheduler = new TestScheduler()
      • scheduler.CreateObservable(OnNext(300, "wes"), OnNext(400, "ryan"), OnCompleted(500))
      • results = scheduler.Run(...)
      • results.AssertEqual(...) 
  • debugging
    • Use .Do to cause side effects (like Console.WriteLine) that you can observe to figure out what's going on 
  • Other stuff
    • .DistinctUntilChanged can de-dup an event stream
    • .Timestamp makes T into Timestamped<T> which 
    • Throttle: A----B--200ms----C -> A gets cancelled because B happened within throttle period 
  • Challenges
    • Challenge in learning Rx: there are a lot of operators 
  • Path Forward
    • Already on the Win7 Phone ROM
    • Unstable releases every 3 weeks-ish right now 
    • Stable releases: not as often, but supported, documentation, etc. .NET 4.0+, Silverlight 5, Win7 Phone
    • Binaries and doc comments are redistributable

Comments (0)

You don't have permission to comment on this page.