June 9, 2018

Please reload

Recent Posts

.NET Everywhere

June 9, 2018

1/5
Please reload

Featured Posts

Merging IObservable<Egg>

August 10, 2017

The Reactive Merge operator came up recently in our office during a discussion about chickens.

 

 Photo credit: Eight-Bot engineer Jeff Fichtner

 

 

Let's say you construct a Rube Goldberg / Wallace and Gromit style machine to turn eggs into pancakes.

 

 

Like any good machine, it's a time saver because it performs a repetitive activity the same way every time.  That frees up our human time so we can do more interesting things, like watch movies or play video games.

 

How does the machine know when to start cooking automatically?  We give it a mechanism for observing the appearance of an egg and reacting to it.

 

In Reactive vocabulary, a hen is like an IObservable<Egg>.  She lays eggs periodically – we don't know how often, or how many total eggs, or for how long.  The machine subscribes to that observable, and reacts to it by performing a number of steps that put a pancake on a plate in the end.  Using the ReactiveUI extensions:

 

But what if you have more than one hen?

 

 

We could build four separate instances of our machine and hook up one machine to each chicken.  But that would require a lot of resources.  Instead, we could just put a bin under all our hens that funnels any of their eggs into the same machine.  Observable.Merge is like that bin that takes in several different IObservable<Egg> sequences and merges them.

 

We don't care which chicken the egg came from, and Observable.Merge doesn't bother to tell us.  The only thing that matters is that all of the combined sequences emit the same thing – an Egg – so we can treat them the same way and do the same thing in response to any of them:

 

 

This frees up even more of our time so we can go do even more interesting things.  And we get pancakes!

 

 

Useful Resources:

ReactiveX

ReactiveUI

 

Share on Facebook
Share on Twitter
Please reload

Follow Us
Please reload

Search By Tags
Please reload

Archive
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
Xamarin Partner
LINKS
ABOUT

contact@eightbot.com

Tel: 1-855-727-8246

318 W Adams St

Chicago, IL 60606

SOCIAL
  • White Facebook Icon
  • White Twitter Icon
  • White LinkedIn Icon
  • White Google+ Icon

© 2017 | Eight-Bot, Inc.