Rx Christmas Release 2010 - Introducing Join and GroupJoin operators (and more) RRS feed

  • General discussion

  • Hi folks,

    We're happy to announce a new release of Rx. Here are the release notes:

    Build 1.0.2838.0 12/24/2010 – Rx Christmas Release 2010



    ·         New: support for joins in Rx. This includes two new operators, Join and GroupJoin, which have query expression support too:

    o   This work will be covered on Channel 9 in much more detail. We’ll update this post with a link to the video when it’s online. Here’s the sketch of this new functionality.

    o   Depending on the use of “into”, either Join or GroupJoin is being called in the following sample (see language specification for more details on the translation into query operator methods):
       from x in xs
       join y in ys on f(x) equals g(y) [into z]
    In the sample above, xs and ys are observable sequences. Furthermore, f(x) and g(y) are functions that return an observable sequence that denotes a duration. Results are produced when those observable sequences overlap. For example, one could monitor people entering and leaving a room and create a joined sequence that produces pairs of people that are in the same room at the same time.

    o   Added a Window operator that uses joins underneath.

    o   Reimplemented BufferWithTime, BufferWithCount, BufferWithTimeOrCount in terms of those new join and windowing operators.

    ·         Generalized Publish family of operators (Publish, Prune, Replay) to a single Publish operator that takes in a Subject. Sharing a subscription to an observable sequence can be seen as “shadowing” the observable sequence using a Subject that can enforce different sharing policies (e.g. maintain history or not).

    o   Related to this work is the addition of a Multicast operator, which encapsulates a ConnectableObservable.

    o   ConnectableObservable is now parameterized in two generic type parameters, reflecting the most general ISubject.

    ·         Added an overload to If that doesn’t take an “else” case observable sequence (defaulting to Observable.Empty).

    ·         Fixes:

    o   DispatcherScheduler is now maintained on a per-thread basis using ThreadStatic.

    o   Refined implementation of Switch.

    o   Variance annotations on IAsyncEnumerable and IAsyncEnumerator for .NET 4.



    ·         Fix for scheduling in the Concat, Catch, and OnError operators.

    ·         If operator can now be used without supplying an “else” case.



    ·         Fix to EnumerableEx.Scan.

    Download the different release flavors here:

    Let us know what you think!

    Happy Holidays,
    -The Rx team

    using (Microsoft.Sql.Cloud.DataProgrammability.Rx) { Signature.Emit("Bart De Smet"); }
    • Edited by Bart De Smet [MSFT] Friday, December 24, 2010 4:47 AM Updated link to JavaScript release.
    Friday, December 24, 2010 4:40 AM

All replies

  • Woo! Joins, very cool.
    Friday, December 24, 2010 10:51 AM
  • Hi Rx team,

    I want to give feedback regarding the latest RxJS release.

    1) The Publish overload throws an error.
    var q = Rx.Observable.Range(1, 5);
    var q2 = q.Publish(function(p) { return p; });
    q2.Subscribe(function(r) { console.log('r: ' + r); });

    When the above snippet gets executed the browser error console show this error message: r0.OnNext is not a function.

    2) The behavior of Zip differs in Rx.NET and RxJS. The following snippet produces no output:
    var obs1 = Rx.Observable.FromArray(['a', 'b', 'c']);
    var obs2 = Rx.Observable.FromArray([1, 2, 3]);
    obs1.Zip(obs2, function(l, r) { return {left: l, right: r}; })
    .Subscribe(function(x) { console.log(x); });

    Please see also this thread: http://social.msdn.microsoft.com/Forums/sv-SE/rx/thread/7a3f85f9-2c80-4f3d-b221-0091bcb403e4

    Thanks, Peter
    • Edited by Peter Fels Saturday, December 25, 2010 9:19 AM Formatting broken
    Saturday, December 25, 2010 9:16 AM
  • Hi,

    Is NuGet still in the deployment plan?  I'm not seeing any updates yet.


    Monday, December 27, 2010 4:44 PM
  • Hi Dave,

    We're working on getting the packages out. Stay tuned.

    Update: The packages are online now.


    using (Microsoft.Sql.Cloud.DataProgrammability.Rx) { Signature.Emit("Bart De Smet"); }
    Tuesday, December 28, 2010 3:54 AM
  • What is Ix.NET ?

    I have searched the forum, Microsoft site, google etc. but can't find anything about it.

    Friday, January 7, 2011 11:09 AM
  • What is Ix.NET ?

    I have searched the forum, Microsoft site, google etc. but can't find anything about it.

    It's short for Interactive eXtensions ... System.Interactive.dll.  These are the extensions that have been added to IEnumerable, to maintain duality between the reactive and the interactive extensions.
    Friday, January 7, 2011 3:50 PM
  • DispatcherScheduler is now maintained on a per-thread basis using ThreadStatic.
    If that means Scheduler.Dispatcher is now a thread-static property, then that change is going to break a lot of code. I think the original implementation, where Scheduler.Dispatcher was "pure" static, was the way to go. Most of the time, if you want a DispatcherScheduler, you want one for the main thread's Dispatcher.  That's the most common use case by far.  The only snag with the original design was that you needed to make sure Scheduler.Dispatcher was initialized on the UI thread.
    Monday, January 10, 2011 9:14 PM
  • Looks like NuGet v1.2 now supports the Windows Phone profile of silverlight using the sl3-wp directory name. Any chance of updating the NuGet packages to support Windows Phone? Also it looks like only SL4 is included in the core package. You might want to add both the SL3 and SL3-WP versions.

    Keep up the great work!

    Thursday, April 14, 2011 4:58 PM