Release Notes

Build 1.0.2787.0 10/28/2010


    • Added XNA 4.0 Xbox 360 support.
    • Added Windows Phone 7 support.
    • Fixed xna crash in CurrentThreadScheduler.
    • Removed conflict of EnumerableEx.Zip and Enumerable.Zip on Silverlight 4.
    • Fixed ForkJoin bug on empty source.
    • Added drain operator.
    • Added Rx extension methods to BCL via System.Reactive.ClientProfile and System.Reactive.ExtendedProfile assemblies.
    • Fixed bug to ensure subjects clear observers once OnCompleted fires.
    • Added support for the new C# await keyword (Observable.GetAwaiter).
    • Added ToTask and ToTaskLast operators
    • Added IAsyncEnumerable interface and all standard query operators for this interface.
    • Fixed bug in Observable.Concat, Observable.Catch and Observable.Merge to dispose of source enumerable correctly.
    • Added NuPack support (packages will be online soon)


    • Changed default schedulers to immediate where possible to match semantics.

Download Rx 1.0.2787.0 for .NET 3.5 SP1
Download Rx 1.0.2787.0 for .NET 4
Download Rx 1.0.2787.0 for Silverlight 3
Download Rx 1.0.2787.0 for Silverlight 4
Download Rx 1.0.2787.0 for JavaScript
Download Rx 1.0.2787.0 for all common flavors
Download Rx 1.0.2787.0 for XNA 4 XBOX 360
Download Rx 1.0.2787.0 for XNA 3.1 Zune
Download Rx 1.0.2787.0 for Windows Phone 7

Build 1.0.2698.0 9/10/2010, HotFix release


    • move testing code to separate assembly (System.Reactive.Testing) to make Rx run on .NET 4 Client profile again
    • fix race condition in certain operators for OnError/OnCompleted messages

Download Rx 1.0.2698.0 for .NET 3.5 SP1
Download Rx 1.0.2698.0 for .NET 4
Download Rx 1.0.2698.0 for Silverlight 3
Download Rx 1.0.2698.0 for Silverlight 4
Download Rx 1.0.2698.0 for all common flavors
Download Rx 1.0.2698.0 for XNA 3.1 XBOX
Download Rx 1.0.2698.0 for XNA 3.1 Zune

Build 1.0.2677.0 8/27/2010


    • Fixed bugs in ForkJoin and Catch when using Immediate scheduler.
    • Added download containing all common Rx flavors (.NET 3.5, .NET 4, SL3, SL4, JS).
    • Added XNA 3.1 XBOX and Zune flavors.
    • Added additional Publish overloads.
    • Removed public helper from DistinctUntil.
    • Changed FromAsyncPattern operators to use Immediate Scheduler on async subject.
    • Added helper code for testing Rx using TestScheduler (System.Reactive.Testing namespace).


    • Added virtual & test scheduler.
    • Made currentThread scheduler use priority queue to optimize performance.
    • Added dojo deferred support.
    • Added bindings for Microsoft Translator & Google Language.
    • Made 2 small perf fixes suggested by Douglas Crockford.

Download Rx 1.0.2677.0 for .NET 3.5 SP1
Download Rx 1.0.2677.0 for .NET 4
Download Rx 1.0.2677.0 for Silverlight 3
Download Rx 1.0.2677.0 for Silverlight 4
Download Rx 1.0.2677.0 for all common flavors
Download Rx 1.0.2677.0 for XNA 3.1 XBOX
Download Rx 1.0.2677.0 for XNA 3.1 Zune

Build 1.0.2617.0 07/15/2010


    • Fixed GC issue with ThreadPool Timer.
    • Made lock in CompositeDisposable smaller.
    • Fixed deadlock in ForkJoin when using Immediate scheduler.
    • Changed order of arguments for Generate* operators to match C# for pattern based on feedback from C# Team.
    • Changed FromAsyncPattern to catch exceptions thrown in BeginInvoke.
    • Made ConnectableObservable.Connect block subsequent calls until first call is complete.
    • Added virtual scheduler and test scheduler
    • Made MaxBy & MinBy operators return all values that match.
    • Renamed EnumerableEx.LongCount to EnumerablEx.LongCountEnumerable to avoid naming conflict with Enumerable.LongCount.


    • Added Virtual Earth and Google Maps bindings.
    • Fixed crash in For operator with use of Immediate scheduler.
    • Changed order of arguments for Generate* operators to match JavaScript for pattern based on feedback from C# Team.

Download Rx 1.0.2617.0 for .NET 3.5 SP1
Download Rx 1.0.2617.0 for .NET 4
Download Rx 1.0.2617.0 for Silverlight 3
Download Rx 1.0.2617.0 for Silverlight 4

Build 1.0.2563.0 06/09/2010


    • Separated SL3 and SL4 installers
    • Added EventLoopScheduler (executes on dedicated thread)
    • Ported many operators from System.Reactive to System.Interactive
    • Removed Amb & Merge from System.Interactive in favor of ToObservable.Amb using System.Reactive
    • Added FromEvent overload for non-generic EventHandler
    • Fixed performance in N-ary overload of ForkJoin


    • Improved MooTools support

Download Rx 1.0.2563.0 for .NET 3.5 SP1
Download Rx 1.0.2563.0 for .NET 4
Download Rx 1.0.2563.0 for Silverlight 3
Download Rx 1.0.2563.0 for Silverlight 4

Build 1.0.2521.0 05/14/2010


    • Added Iterate & ListObservable for enumerable iteration pattern
    • Added schedulers to subjects to control synchronization
    • Added co and contravariance for IConnectableObservable<T>, IGroupedObservable<T> & ISubject<T1,T2>
    • Added Rx equivalent of IQueryable: IQbservable including interfaces & operators.
    • Fixed Run operators exception behavior
    • Enabled sidebyside install of different versions of Rx (the previous version, 1.0.2441.0 and future versions)
    • Install location changed for above change to %PROGRAMFILES%\Microsoft Cloud Programmability\Reactive Extensions\<rx version>\<.net version>


    • Added additional bindings for dojo, ExtJs, MooTools, Prototype, JQuery, Yui3
    • Added new bindings for Raphael
    • Fixed nullness issue in mutableDisposable
    • Fixed order issues in subscription, Switch & Amb
    • Fixed "concurrency" issue in subjects
    • Fixed Do exception behavior
    • Added Do observable overload
    • · fixed Defer unsubscription bug
    • · added While, If, DoWhile, Case, For and Let operators.

Download Rx 1.0.2521.0 for .NET 3.5 SP1
Download Rx 1.0.2521.0 for .NET 4
Download Rx 1.0.2521.0 for Silverlight 4

Build 1.0.2441.0 04/14/2010


    • Added BufferWithTimeOrCount.
    • Changed ForkJoin to take the last value from each source.
    • Peformed FxCop naming cleanup work.
    • Removed FutureDisposable in favor of MutableDisposable.
    • Added Sequential operators like While, If, Case etc…
    • Added SkipLast & TakeLast.
    • Made fixes to CurrentThreadScheduler & NewThreadScheduler.
    • Added Scan0.
    • Made Sample fire last sample area on Oncompleted & have abort semantics on Error.
    • Made Buffers have abort semantics on Error.
    • Moved to .NET 4 RTM


    • Changed distribution from MSI installer to ZIP file
    • Added BufferWithTimeOrCount.
    • Added ForkJoin.
    • Added SkipLast & TakeLast.
    • Removed FutureDisposable in favor of MutableDisposable.
    • Breakout support for html api into separate file (rx.html.js).
    • Added jQuery support (rx.jquery.js).
    • Added dojo support (rx.dojo.js).
    • Added MooTools support (rx.mootools.js).
    • Added Prototype support (rx.prototypel.js).
    • Added ExtJS support (rx.extjs.js).
    • Added Yui3 support (rx.yui3.js).
    • Added aggregates such as Sum, Count, IsEmpty etc…  (rx.aggregates.js).
    • Added joins support (rx.joins.js).
    • Changed default schedulers for various API.
    • Made List implementation public.
    • Made several  to TakeUntil, Scan1,Take, SkipWhile, Repeat, Retry, Catch, StartWith, Subjects, ToAsync, Start.
    • Make schedulers have own notion of time (Now()).
    • Added Scan0.
    • Made Sample fire last sample area on Oncompleted & have abort semantics on Error.
    • Made Buffers have abort semantics on Error.
    • Fixed Aggregate, Count, Sum & Average behavior on empty observables.
    • Added Samples for all different library integration points
    • Added readable (debug) version of library integration points.

Download Rx 1.0.2441.0 for .NET 3.5 SP1
Download Rx 1.0.2441.0 for .NET 4
Download Rx 1.0.2441.0 for Silverlight 3 & 4

Build 1.0.2369.0 03/17/2010

  • Reactive Extensions for JavaScript, initial release.

Build 1.0.2350.0 03/15/2010

  • Added System.Observable to redist.txt.
  • Changed Timeout to work on multiple notifications.
  • Renamed HoldUntilChanged to DistinctUntilChanged.
  • Made Semaphore for Silverlight internal.
  • Adding Zip overload for IO<T> and IE<T> zipping.
  • Changed last Throttle message to come out at Completion time and fix concurrency bug in Throttle.
  • Changed OnErrorResumeNext to always complete.
  • Changed Delay error semantics to be abort.
  • Added ObserveOn/SubscribeOn on IScheduler.
  • Fixed finally behavior.
  • Minimized locks in subjects.
  • Added MinBy, MaxBy operators as well as Min, Max with comparers.
  • Added DistinctBy for Enumerable.

Build 1.0.2317.0 03/05/2010

  • Moved to RC for .NET 4 build.
  • Moved IObservable & IObserver to seperate assembly: System.Observable.dll.
  • Removed IsCritical and its usage on exceptions thrown inside Rx operators.
  • Fixed bugs in Enumerable->Observable conversions.
  • Fixed threading bugs in EnumerableEx Merge and Amb operator.
  • Changed signature of Buffer to expose an IList<T> as opposed to an IEnumerable<T>.
  • Fixed Buffer behavior, with regards to flushing last frame and non-overlapping windows (count < skip).
  • Renamed Buffer to BufferWithTime and BufferWithCount.
  • Introduced BufferWithCount for IEnumerable.
  • Renamed Hide to AsObservable, add AsObserver, AsEnumerator.
  • Moved Schedulers & Disposables to System.CoreEx.
  • Added schedulers to subjects.
  • Enforced abort semantics for all exceptions in Rx.
  • Added OfType and Cast to Observable, plus additional Do methods + parity in EnumerableEx.
  • Reworked GroupBy to be lazy & performant.
  • Removed deadlocks throughout Rx.
  • Fixed reentrancy bug in Scheduler.
  • Added RefCountDisposable.
  • Removed LockDisposable.
  • Added AsyncLock.
  • Changed TimeSpan.MaxValue to not be a sentinel value for Infinite.
  • Changed IScheduler argument positioning to be last where possible.
  • Moved schedulers to System.Concurrency.
  • Renamed Scheduler.Now to Scheduler.CurrentThread.
  • Renamed Scheduler.Later to Scheduler.ThreadPool.
  • Removed Scheduler.Default.
  • Added Scheduler.Immediate and ImmediateScheduler.
  • Added Scheduler.TaskPool and TaskPoolScheduler where Tasks are available.
  • Added Scheduler.NewThread and NewThreadScheduler.
  • Added SynchronizationContextScheduler.
  • Added IConnectableObservable.
  • Added ConnectableObservable.
  • Removed EventSubject.
  • Changed Publish/Replay/Prune to return IConnectableObservables.
  • Added RefCount operator.
  • Made all subjects not disposable.
  • Added schedulers to asynchronous operations.
  • Made Rx assemblies CLSCompliant.
  • Added aggregate operators.
  • Removed properties from Rx.
  • Removed timedrift from time based operators.
  • Changed default schedulers for operators.
  • Cleaned up Generate and GenerateWithTime overloads.
  • Renamed GroupDisposable to CompositeDisposable.
  • Moved reference required overloads of extension methods to defining namespace.
  • Many other small bug fixes.
  • Removed BooleanSignal.
  • Fixed timing bug in ControlScheduler.

Build 1.0.2149.0 12/22/2009

  • Include version number in Setup Title & UAC elevation prompt
  • Fix assembly file version to state 1.0.2149.0 instead of 0.9.00
  • Fix typo in license
  • Fix deadlock issue with Scheduler.Now by installing trampoline at Subscribe
  • Bring EnumerableEx.Using inline with Observable.Using
  • Remove extra firing from Generate timer

Build 1.0.2144.0 12/18/2009

  • License changes based on forum feedback
  • Add FromAsyncPattern to Silverlight
  • Remove Observable.Context and replace with IScheduler mechanism.
  • Perf fixes for Last*,First* and Single*. Adding Any, All
  • Additional StartWith overloads
  • Fix bug in EnumerableEx.Memoize
  • Fix bug in EnumerableEx.Retry
  • Fix bug in EnumerableEx.Merge
  • Add ObserveOn & SubscribeOn for Control and Dispatcher schedulers
  • Removed all time based operators which takes an Int instead of a TimeSpan or DateTime
  • Generalized the Using operator by adding a type parameter TResource constrained to implement IDisposable
  • Renamed BufferWithTime to Buffer since there is no ambiguity between the two now
  • Renamed Until to TakeUntil
  • Renamed WaitUntil to SkipUntil
  • Added various disposables in System.Disposables
  • Fixed a bug in Observable.Join
  • Added Observable.IsEmpty
  • Changed DateTime to DateTimeOffset
  • Setup will automatically uninstall previous releases

Build 1.0.2067.0 11/20/2009

  • Improved performance of FromEvent.
  • TimeInterval & TimeStamped now have a ToString() to help debugability.
  • A few general performance improvements regarding Notifications, including Generate and various time based operators
  • Fixed semantics of Delay
  • Improve performance of Throttle

Known issue: need to uninstall previous build before installing new build (will be fixed in next release).

Build 1.0.2052.0 11/17/2009, First Release

There are 3 versions of Rx: Rx for .NET 3.5 Sp1, Rx for Silverlight 3 and Rx for .NET 4 Beta 2.

All 3 versions can be downloaded from the Devlabs Rx project page.

The installer ships the following dlls:

System.CoreEx, api used by both System.Reactive and System.Interactive:

  • Additional Action<,> and Func<,> types (for .NET 3.5 SP1 only, matches types in .NET 4)
  • TimeInterval<T> & TimeStamped<T> adds time information to a value.
  • IEvent<TEventArgs> wraps existing .NET event values.
  • Notification<T> to materialize next/error/completed notifications.
  • SynchronizationContexts provides access to common SynchronizationContexts.
  • Unit, represents void for use in generics.
  • BooleanSignal, a boolean state locking mechanism wrapping Semaphore.
  • Semaphore adds the semaphore functionality to Silverlight 3.

System.Reactive, api related to IObservable & IObserver.

  • IObservable<T> & IObserver<T>, the base interfaces for Reactive (lives in mscorlib.dll for .NET 4).
  • Numerous Observable & Observer sequence operators:
    • Standard LINQ operaturs such as: Select, Where, GroupBy, SelectMany
    • combining operations such as Zip Repeat, Merge, Amb, Concat and StartWith.
    • caching operations such as: Share, Memoize, MemoizeAll and Publish.
    • creation operators such as: Return, Throw, Repeat and Generate.
    • threading operators such as: Asynchronous, Synchronize, SubscribeOn, ObserveOn.
    • exception handling operators such as: Catch, Finally, Retry and OnErrorResumeNext.
    • evaluation operators such as: Run & Do.
    • stream manipulation operators such as: Scan and Aggregate
    • time based operators: Timestamp, Interval, Delay,
    • remoting operator: Remotable
  • Various Subjects, publish & subscribe (pub/sub) for Reactive with different caching policies.
  • System.Joins.*, implements join-calculus on top of Rx.

System.Interactive, backport of Observable sequence operators that apply to IEnumerable as well.

  • combining operations such as Zip (for .NET 3.5 SP1 and Silverlight 3), Repeat, Merge, Amb, Concat and StartWith.
  • caching operations such as: Share, Memoize, MemoizeAll and Publish.
  • creation operators such as: Return, Throw, Repeat and Generate.
  • threading operators such as: Asynchronous & Synchronize.
  • exception handling operators such as: Catch, Finally, Retry and OnErrorResumeNext.
  • evaluation operators such as: Run & Do.
  • stream manipulation operators such as: Scan.
  • remoting operator: Remotable.

System.Threading, backport of Parallel Extensions for .NET 4 to .NET 3.5 SP1

  • Task<T> for executing asynchronous operations.
  • Concurrent Collections such as ConcurrentStack, ConcurentQueue ad ConcurrentDictionary.
  • PLINQ for writing parallel queries.
  • addition Threading operations such as Barrier,SpinLock and SpinWait.


Comments (11)
  1. Keith Farmer says:

    So why have a new type, Unit, instead of using System.Void?  I must be missing something.

  2. @KFarmer> System.Void is treated by .NET as a special type that cannot be used in generic arguments. e.g. IObservable<System.Void> is not allowed, that’s why we provided the alternative Unit.

    Some of our api return an event stream that only signals completion, such as Observable.ToAsync(Action action) which returns IObservable<Unit>

  3. Zodman says:

    Well done Rx team!  

    This changes everything, and it’s only the beginning.  What a time to be a developer!

    Keep up the fantastic work!

  4. abdelaliz says:

    I am not sure how to use the TakeLast method. Is it possible to provide a short snippet on how to use it.

    Thanks a lot and keep em coming. Great work !!

  5. cromwellryan says:

    Rx is fantastic.

    How is anyone going to take this thing seriously, though, with a type called IQbservable.  That must have been a great naming party.

  6. Emmanuel says:

    This is great but here is my problem. I have read and used Rx on my own at home and love it. Two weeks ago, I did a demo for my boss in relation to a project we are about to start. He was very excited but ask the blocking question "this is great but what makes you think this will not end up like volta". I had no response of cause. So my question is that, its all great to say a project is experimental but since volta was shut down, no word has been release whether its been faced out or …..leaving first adopters hanging. I will assume Rx is here to say since its been somewhat integrated into silverlight, wpf , javascript etc. With that said, what should be the response to my boss.

  7. Livingston says:

    Please release more use documentation

  8. Livingston says:

    Please release more use documentation

  9. RHein says:

    @Emmanuel … Rx is Volta … that's your answer.

  10. Guys,

    you really really REALLY need to remove the UnitTesting reference in System.Reactive for .Net 4.0.  It can't be used in ClientProfile apps… HUGE bummer.

  11. I just installed the latest Rx and went to the C:Program Files (x86)Microsoft Cloud ProgrammabilityReactive Extensionsv1.0.2787.0WP7 directory.  When I replaced my reference to Microsoft.Phone.Reactive with System.Reactive it complained that this was a full Silverlight assembly.

    Why not put out a release that has the assembly named Microsoft.Phone.Reactive?  Why change namespaces? Why not mark this assembly as Windows Phone 7 Compatible?

Comments are closed.

Skip to main content