Skip to content

Instantly share code, notes, and snippets.

@akarnokd
Created July 24, 2018 13:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akarnokd/2b59b20f7beb980d2c0fd7cb20aa55a4 to your computer and use it in GitHub Desktop.
Save akarnokd/2b59b20f7beb980d2c0fd7cb20aa55a4 to your computer and use it in GitHub Desktop.

NuGet: 4.1.0

>PM Install-Package System.Reactive -Version 4.1.0

Version 4.1.0 is an enhancement version over 4.0.0 by keeping the public API and extending it additively as well as having significant internal changes for better performance via less allocation, less indirection and less locking on the existing components. Note that the codebase now uses C# 7.1 language features.

API enhancements

  • Pull 486: Add the RetryWhen operator.
  • Pull 497: Add the IConnectableObservable.AutoConnect() operator.
  • Pull 536: Add the RepeatWhen operator.
  • Pull 133: Add a RefCount overload supporting a grace period before disconnecting.
  • Pull 567: Add the Append and Prepend operators.

Performance enhancements

  • Pull 504: Improve the logic of AsyncLock.
  • Pull 505: Improve and fix CompositeDisposable.
  • Pull 491: Optimize Concat(IObservable<IObservable<T>>).
  • Pull 499: Make TailRecursiveSink lock-free and have less allocations.
  • Pull 506: Improve AutoDetachObserver memory footprint.
  • Pull 508: Replace ObserveOn(IScheduler) internals with a lock-free algorithm.
  • Pull 510: Improve AsyncSubject by using lock-free methods.
  • Pull 511: Improve Subject observer tracking.
  • Pull 512: Improve Amb with lock-free algorithm.
  • Pull 513: Make Never<TResult> singleton.
  • Pull 535: SerialDisposable to use lock free methods.
  • Pull 544: Make plain Empty<T>() a singleton.
  • Pull 545: Dedicated Amb implementation for arrays and enumerables.
  • Pull 550: Rework TakeUntil with lock-free methods.
  • Pull 500: Avoid some closure allocations and enable delegate caching in the System.Reactive.Concurrency namespace.
  • Pull 549: Deanonymize operators.
  • Pull 556: Use the helper methods for IDisposable-fields, avoid repeating code patterns.
  • Pull 551: Rework SkipUntil with lock-free methods.
  • Pull 546: Reimplement Timeout(TimeSpan) with lock-free methods.
  • Pull 566: BasicProducer/Producer: Save the allocation of a closure and allow delegate caching in case scheduling on CurrentThreadScheduler is required.
  • Pull 558: Use Schedule calls with state.
  • Pull 568: Use Disposable helper methods were applicable.
  • Pull 574: Make RefCountDisposable lock-free.
  • Pull 575: Rework subscription in Producer such that all Sinks set the upstream disposable by themselves.
  • Pull 561: Inline disposability into ScheduledItem.
  • Pull 578: Inline StableCompositeDisposable.Create into the Sinks.
  • Pull 580: Inline Disposable.Create.
  • Pull 583: Use the stateful overload of AsyncLock in some places to save allocation of closures and allow delegate caching.
  • Pull 586: Save more allocations of closures and enable more delegate caching.
  • Pull 592: Inline AnonymousObserver use at places.
  • Pull 591: Save even more allocations.
  • Pull 590: Improve blocking First & Last operators.
  • Pull 593: Inline SerialDisposable usages.

Bugfixes

  • Pull 569: Fix PriorityQueue non-first element removal.
  • Pull 579: Fix timed delay hangs with dotCover and the DefaultScheduler.
  • Pull 528: Fix PeriodicTimerSystemClockMonitor concurrency & failure behavior.
  • Pull 560: Fix Delay hanging due to wrong disposable-chain management.
  • Pull 421: EventLoopScheduler set _nextItem to null on Tick to avoid leaks.
  • Pull 514: Fix ActivePlan crashing with self-joins.
  • Pull 529: Have the ControlScheduler do more eager disposed checks.
  • Pull 507: Fix PriorityQueue to not share a item ordering helper index.
  • Pull 505: Fix CompositeDisposable concurrency.

Documentation changes

  • Pull 480: Update RxJS reference.
  • Pull 538: Fix CS1711: The type parameter comes from the outer class, where it is already documented. No need to document it here again.
  • Pull 543: Fix XML document spelling errors.
  • Pull 519: Updated links in README.md.
  • Pull 589: Add missing state XML comment to the new AsyncLock methods.

Other notable (internal) changes

  • Pull 527: Refactor Linq operator unit tests into separate files/classes.
  • Pull 523: Fix CombineLatest and Zip code generator templates. (#)
  • Pull 515: Reference System.ValueTuple for further reduction of allocations, use C# 7.1 to use value tuples without the need for explicit tuple component naming.
  • Pull 554: Enhance AsyncLock to support passing state.
  • Pull 493: Strengthen the concept of the Sink class.
  • Pull 482: Add public API approval tests for Rx.NET.
  • Pull 548: Avoid repeating code patterns in the System.Reactive.Disposables-namespace.
  • Pull 518: Add a new extension method for IScheduler that allows to schedule an Action<TState> and pass a corresponding state object.
  • Pull 555: Resolve the source of confusion that is DefaultDisposable.
  • Pull 564: Rename and reorder the signature of the extension for schedule that takes an Action<TState> and a state.
  • Pull 537: Update the HomoIcon tool to reflect new repository structure and manual code changes.
  • Pull 563: Add internal ExceptionHelper & HalfSerializer lock-free tools.
  • Pull 572: Use HalfSerializer extensions.
  • Pull 588: Check for license header and add them if missing.
  • Pull 595: Add reflection-based Argument-Null validation test.
  • Pull 601: Use LastIndexOf instead of IndexOf in LicenseHeaderTest.
  • Pull 597: Capture the concept of a "safe observer".
  • Pull 603: Align safe observers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment