Good example of Reactive Extensions Use

I understand the basics of Rx. Where I'm struggling is how you would actually use this beyond academic examples? What are some common, simple real-world scenarios where Rx is a much better solution than what we have today in .NET?

42023 次浏览

For a bunch of good examples, see the 101 Rx Samples wiki

  • Device measurments
  • Data comming in over a message bus

In both cases now, the standard way to receive the data is via events, but if I want query syntax, or composition, then RX gives it to me where events don't.

First of all, IObservable is an event. So in anywhere you use events internally, you can use IObservable - and if you later need to apply LINQ to this event, you're able to do it without refactoring.

Second, RX is fit for any situation when you need to run your code asynchronousely. For example, calling a web service, or loading a large image.

But when it really starts to shine - if your program reaches some "critical mass" of IObservable usage and you start combining different observables you would be amazed how easy some tasks become.

Rx is very general so it has unlimited utility, just like IEnumerable/IEnumerator has unlimited utility. IE pulls values, IO pushes values.

Foreach is a concrete example of where IEnumerables come in handy, but that doesn't explain IEnumerable, or yield or anything. Same goes with Rx.

Being able to look at something from either a pull point of view, or a push point of view, and being able to control the direction or means, is very powerful, because now you can push and pull computations around at will, using LINQ query operators for "free", against an IO, because it's the mathematical dual of IE.

I've just had my first look at Rx, but one fun project I'll use it for is creating a Silverlight widget that displays activity in our ASP.NET MVC web app (which action methods were called, by which user, etc). It seems that Rx can help with a lot of things in this project, such as concurrency management and Throttling.

Rx allows you to write code that orchestrates concurrent events together. If you've ever used the TPL (i.e. Task), then had to do convoluted backflips to try to ContinueWith or WaitAll on the right things, Rx is for you.

For example, the workflow of "For each item in this array, call a web service, and when all of those requests come back, do something else. If any one of them fail, fail the whole thing".

Disclosure, Shameless plug ahead: The book that Jesse Liberty and I wrote about Rx was designed to solve exactly this question, "How do I use Rx in my day-to-day work?"; "What can I do with this?"