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

  • Finally, you can manage your Google Docs, uploads, and email attachments (plus Dropbox and Slack files) in one convenient place. Claim a free account, and in less than 2 minutes, Dokkio (from the makers of PBworks) can automatically organize your content for you.


Reactive Extensions

Page history last edited by Chris Bilson 10 years, 1 month 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.