Today I made an attempt to make some sense of Reactive Framework(Rx). Rx allows developers to write queries against events. I know, I had hard time wrapping my head around this concept as well. I hope the example below will help.
I downloaded and installed Rx extensions for Silverlight from the page above. I created new Silverlight project and added references to three DLLs that are included with Rx:
System.CoreEx, System.Observable, System.Reactive.
In attempt to save time I created RIA Services project. Rx is not as good of a fit for the Rx pattern, so my example is a bit contrived.
First, I am creating new instance of domain context
RXContext context;Now, I am creating new query and starting the load for it:
var talks = context.GetTalksQuery();var op = context.Load<Talk>(talks, LoadBehavior.RefreshCurrent, false);
Now, the fun part: I am creating two event handlers by querying completed event with two different where clauses – one for error, the other for success:
var events = Observable.FromEvent((EventHandler<EventArgs> eventInstance) =>new EventHandler(eventInstance),
eventInstance => op.Completed += eventInstance,eventInstance => op.Completed -= eventInstance);var subsc = events.Where(ev => op.Error == null).Subscribe((args) =>
{ gridTalks.ItemsSource = op.AllEntities; });var errorSubs = events.Where(ev => op.Error != null).Subscribe((args) =>
{ MessageBox.Show(op.Error.ToString()); });In the first statement I am converting regular event to observable event. In the other two statement I am creating two event subscriptions with different where clauses.
Rx supports other clauses, such as group by as well. I can see that Rx in general can result in cleaner, more readable code. You can find more details at this Rx 101 page.