Rx.NET v4.1.0-preview.84
NuGet: 4.1.0-preview.84
>PM Install-Package System.Reactive -Version 4.1.0-preview.84
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
andPrepend
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 onCurrentThreadScheduler
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 allSink
s set the upstream disposable by themselves. - Pull 561: Inline disposability into
ScheduledItem
. - Pull 578: Inline
StableCompositeDisposable.Create
into theSink
s. - 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 tonull
onTick
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
andZip
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 anAction<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 ofIndexOf
inLicenseHeaderTest
. - Pull 597: Capture the concept of a "safe observer".
- Pull 603: Align safe observers.