Good example of Reactive Extensions Use

C#.Netsystem.reactive

C# Problem Overview


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?

C# Solutions


Solution 1 - C#

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

Solution 2 - C#

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?"

Solution 3 - C#

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.

Solution 4 - C#

  • 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.

Solution 5 - C#

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.

Solution 6 - C#

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKeith HillView Question on Stackoverflow
Solution 1 - C#sblomView Answer on Stackoverflow
Solution 2 - C#Ana BettsView Answer on Stackoverflow
Solution 3 - C#Sergey AldoukhovView Answer on Stackoverflow
Solution 4 - C#Scott WeinsteinView Answer on Stackoverflow
Solution 5 - C#Richard Anthony Freeman-HeinView Answer on Stackoverflow
Solution 6 - C#Adrian GrigoreView Answer on Stackoverflow