Skip to main content

The Reactive Extensions (Rx)... a library to compose asynchronous and event-based programs using observable collections and LINQ-style query operators.


Get it
Get it
Get Started
Beginner's Guide
Learn more
Learn more


About the Reactive Extensions

The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. Using Rx, developers represent asynchronous data streams with Observables, query asynchronous data streams using LINQ operators, and parameterize the concurrency in the asynchronous data streams using Schedulers. Simply put, Rx = Observables + LINQ + Schedulers.

Whether you are authoring a traditional desktop or web-based application, you have to deal with asynchronous and event-based programming from time to time. Desktop applications have I/O operations and computationally expensive tasks that might take a long time to complete and potentially block other active threads. Furthermore, handling exceptions, cancellation, and synchronization is difficult and error-prone.

Using Rx, you can represent multiple asynchronous data streams (that come from diverse sources, e.g., stock quote, tweets, computer events, web service requests, etc.), and subscribe to the event stream using the IObserver<T> interface. The IObservable<T> interface notifies the subscribed IObserver<T> interface whenever an event occurs.

Because observable sequences are data streams, you can query them using standard LINQ query operators implemented by the  Observable type. Thus you can filter, project, aggregate, compose and perform time-based operations on multiple events easily by using these static LINQ operators. In addition, there are a number of other reactive stream specific operators that allow powerful queries to be written.  Cancellation, exceptions, and synchronization are also handled gracefully by using the extension methods provided by Rx.

Reactive Extensions Highlights Entity Framework Highlights

Reactive Extensions

Curing Your Event Processing Blues with Reactive Extensions (Rx)
At TechEd Europe 2012, Bart delivered a session on using Rx to solve various complex event processing problems. In this demo-intensive session, you'll be introduced to the layered architecture of Rx, and learn how to use LINQ to query event streams ranging from UI processing, over stock trading, to sensor programming with Kinect. During this session, Bart also talks about the features in the upcoming Rx v2.0 release, which includes support for Windows 8 applications and .NET 4.5's new asynchronous programming features.
Testing Rx Queries using Virtual Time Scheduling
Lately, we’ve been talking to a lot of customers (both internally and externally) on their use of Rx. Quite often, meetings like these end up explaining various concepts in Rx, ranging from observable sequences, over subjects, to … schedulers. Talking about schedulers almost always leads to a discussion on how to test Rx queries using virtual time scheduling, for many a hidden gem in Rx. In this post, we’ll talk about the role schedulers play in Rx, and how introducing this concept helped an awful lot to provide a testing story for queries.
Rx v2.0 Release Candidate - Time, Error Handling, Event Subscription
Bart is back on Channel 9 and he's going to go deep into improvements made to Rx v2.0 RC (so, Rx v2.0 getting close to coming out of the oven!). As you'd expect, Bart and company have been very busy since Rx v2.0 Beta - lots of performance and reliability improvements and some heavy work in how Rx manages time, new error handling capabilities and event subscription improvements for Rx running on WinRT.
Inside Rx 2.0 Beta
Learn everything about Rx v2.0 Beta, released in March 2012. In this Channel 9 video, Bart talks about the new features in Rx v2.0 Beta, including support for .NET 4.5 asynchronous programming, support for Windows 8 XAML applications, massively improved performance, generalization of time-based operations, and the road to support Portable Library.
Rx Update - .NET 4.5, Async, WinRT
Rx now supports building Windows 8 applications using the new WinRT and XAML APIs! Tune in and watch Bart talk about what the Rx team has been up to in order to make this happen. In this video, you'll learn about Rx's improved synergy with Task<T> and the new "await" language features in C# and Visual Basic, as well as the support for events and the new IAsyncOperation<T> interface in WinRT.
Rx: Curing your Asynchronous Programming Blues
At DevCamp 2010 in Vienna, Bart delivered a keynote on Rx. In this video, you’ll learn about the design philosophy behind Rx, the essential interfaces, important query operators, and more. This session is also jam-packed with demos of the technology, ultimately resulting in a “dictionary suggest” sample application.
Bridging Rx with C# and VB “async” and IAsyncEnumerable
During PDC 2010, future C# and Visual Basic language features for asynchronous programming have been introduced. How does it relate to Rx? In this video, Wes and Jeffrey show how both technologies can peacefully co-exist and complement each other.


Team Blog Posts

Reactive Extensions

Reactive Extensions 2013 Year in Review
This past year saw a number of changes with the Reactive Extensions (Rx). The team, with the help o... more
Wednesday, Jan 1 Rx team
RxJS 2.2 Released
As announced earlier this week by MS Open Tech, the Reactive Extensions for JavaScript (RxJS) versio... more
Friday, Dec 13 Rx team
Rx 2.2 Released!
The MS Open Tech Hub releases Rx 2.2 Today Microsoft Open Technologies, Inc. (MS Open Tech), is ha... more
Monday, Dec 9 Rx team
Rx 2.1 is available on NuGet!
To follow up on our announcement of releasing Rx 2.1 , we'd like to let you know what changed in thi... more
Wednesday, Feb 6 Rx team


Microsoft is conducting an online survey to understand your opinion of the MSDN Web site. If you choose to participate, the online survey will be presented to you when you leave the MSDN Web site.

Would you like to participate?