Rx.NET v5.0.0 Release Notes

Release Date: 2020-11-10 // 6 months ago
  • Rx 5.0

    ๐Ÿš€ The Rx 5.0 release shipped on November 10, 2020 as part of the .NET 5.0 release wave.

    ๐Ÿ”„ Changes:

    0๏ธโƒฃ The query operators in Rx now support the C# 8.0 nullable reference types feature. For example, the DefaultIfEmpty operator now has the following signature:

    public static IObservable\<TSource?\> DefaultIfEmpty\<TSource\>(this IObservable\<TSource\> source)
    

    ๐Ÿ‘ Various types in System.Reactive now support deconstruction, for example:

    var ts = new Timestamped\<string\>("bar", DateTimeOffset.UtcNow);var (value, time) = ts;
    

    โœ… Combining operators such as CombineLatest and Zip now support ValueTuple<>-based overloads (up to 8 components). For example:

    public static IObservable\<(TFirst First, TSecond Second)\> Zip\<TFirst, TSecond\>(this IObservable\<TFirst\> first, IObservable\<TSecond\> second)
    

    Exceptions rethrown inside Rx now are guaranteed to preserve the original stack trace by using ExceptionDispatchInfo consistently across the board. We also have changed the way fresh exceptions on OnError are created, e.g. InvalidOperationException for an empty sequence passed to SingleAsync, in order to guarantee there's a useful stack trace.

    ๐Ÿšš The implementation of Rx has also moved to use C# 9.0 features internally, for example static lambdas.


Previous changes from v5.0.0-preview.220

  • ๐Ÿ”„ Changes:

    โœจ Enhancement:

    • ๐Ÿ‘ #888: Initial work to support EnumeratorCancellation.

    Others:

    • #1392: Bump Verify.Xunit from 6.23.3 to 6.24.0 in /Rx.NET/Source
    • ๐Ÿ‘ป #1391: Ensure all exception rethrows use EDI.
    • โšก๏ธ #1390: Optimize some code.
    • ๐Ÿšš #1389: Remove more dead code
    • #1388: Enable #nullable for disposable utils.
    • #1387: Undo some code divergence.
    • #1386: Make subject implementations a bit more alike. ๐Ÿ‘€ See More
    • #1385: Bump Nerdbank.GitVersioning from 3.2.31 to 3.3.37 in /Rx.NET/Source
    • #1384: Bump Nerdbank.GitVersioning from 3.2.31 to 3.3.37 in /Ix.NET/Source
    • โฑ #1383: Don't leak EventLoopScheduler instances in test code.
    • โš  #1382: Suppress warnings in included Xunit source code
    • ๐Ÿ‘ #1381: Use Array.IndexOf for better perf
    • โœ… #1380: Re-enable some tests
    • โœ… #1379: Address flaky UI framework tests
    • #1378: Seal some types
    • โš  #1376: Fix a number of warnings.
    • #1375: N-ary combining operators with tuples.
    • ๐Ÿšš #1374: Remove some dead code.
    • #1373: Final wave of #nullable in Rx.
    • #1372: Enable #nullable for subjects.
    • #1353: AsyncRx: Avoid closure allocations in Linq-operators when only the source-observable is captured.
    • #1371: Bump Verify.Xunit from 6.23.1 to 6.23.3 in /Rx.NET/Source
    • #1370: Clean up some code
    • #1369: Enable #nullable for some of the disposable types.
    • #1368: Enable #nullable for the last few operators.
    • #1367: Enable #nullable for Group/Join family of operators.
    • #1366: Enable #nullable for some more operators.
    • #1364: More #nullable for query operators.
    • โš  #1363: Fix #nullable warnings for FromEvent et al.
    • #1361: Enable #nullable for FromEvent.
    • #1362: Split public and internal disposable stuff.
    • #1360: More static lambdas in Rx.
    • #1359: Enable #nullable for some straightforward operators.
    • โœ… #1358: Enable #nullable for Zip and CombineLatest.
    • #1357: Enable #nullable for push-pull adapters.
    • #1356: Rename generated files.
    • #1355: More #nullable for operator implementations.
    • ๐Ÿ‘ป #1354: Mark exception throwing helpers as DoesNotReturn.
    • โฑ #1352: Enable #nullable for a few more scheduler types.
    • #1351: Clean up some disposable stuff.
    • #1350: Fix some #nullable in the CAL.
    • #1348: Keep some stuff around
    • #1349: Bump Verify.Xunit from 6.23.0 to 6.23.1 in /Rx.NET/Source
    • โฑ #1347: More #nullable for scheduler code.
    • โฑ #1346: Enable #nullable in scheduler code.
    • #1345: Enable #nullable for easy query operator implementations.
    • #1344: Enabling #nullable for operator surface.
    • #1343: More trivial nullable goodness.
    • #1342: Harvest some low-hanging nullable fruit.
    • #1341: #nullable enable for joins and platform code.
    • #1340: Another batch of #nullable enable.
    • ๐Ÿ›  #1338: Nullable fixes for internal types.
    • #1339: Nullable for TaskObservableExtensions.
    • #1337: Enable nullable in a few files.
    • #1336: First step to enable nullable in Rx.
    • #1335: Bump Verify.Xunit from 6.22.1 to 6.23.0 in /Rx.NET/Source
    • #1334: Propagate OverflowException in SelectMany via OnError.
    • 0๏ธโƒฃ #1333: Reduce default assignments.
    • #1332: Modernize some code.
    • #1330: Bump .NET Framework minimum version to v4.7.2.
    • #1331: Mark some structs as readonly.
    • #1326: Use static lambdas.
    • ๐Ÿšš #1329: Remove more #if checks.
    • ๐Ÿšš #1328: Remove traces of Silverlight in #if checks
    • ๐Ÿšš #1327: Remove some NET45 and NET46 #if checks.
    • โš  #1325: Address a few warnings.
    • #1324: Non-empty stack traces for operator exceptions.
    • ๐Ÿ— #1323: Ix build perf
    • ๐Ÿšš #1322: Remove two more uses of AsyncEnumerable.Create.
    • #1321: Enable usage of EnumeratorCancellaton across the board.
    • #1319: Enable use of EnumeratorCancellation.
    • ๐Ÿšš #1320: Remove unused #defines for Ix.
    • ๐Ÿ“ฆ #1318: Add package descriptions for System.Linq.Async etc.
    • ๐Ÿšš #1317: Remove awaitable interfaces.
    • #1316: Simplify some code
    • #1307: Bump Verify.Xunit from 6.22.0 to 6.22.1 in /Rx.NET/Source
    • ๐Ÿ“š #1314: Fix Observable.FromAsync documentation grammar
    • ๐Ÿšš #1313: Remove unnecessary rendez-vous based on Task.
    • โฑ #1312: Use ValueTask on schedulers.
    • #1311: Misc. code improvements.
    • #1310: Fix FromEventPatternCore's use of the type parameter.
    • โš  #1309: Address some IDE warnings.
    • #1308: Convert operator signatures to use ValueTask.
    • ๐Ÿ‘ #1291: .NET 5 support for Rx.NET

    ๐Ÿš€ This list of changes was auto generated.