Version 2.39.0
Changes
Breaking changes
EnumerableExtensions.ExecuteForAll(Async)
handler needs to return if to yield the result- Moved some extension methods for
IAsyncEnumerable<T>
fromEnumerableExtensions
toAsyncEnumerableExtensions
ReadOnlyCollection<T>
usages are replaced byImmutableArray<T>
nowEnumerationBase
properties returnFrozen(Set|Dictionary)
now- Some
DelegateExtensions.InvokeAll
extension methods return an array now (beforeIEnumerable<>
) JsonExtensions
works with dictionary interfaces now- Added
HumanReadableUnits.FormatBytes
parametersunitFactor
andunitSeparator
HumanReadableUnits
methodsunits
parameter is anImmutableArray<string>
now- Moved
TryDispose(Async)
fromAsyncHelper
to(Async)DisposableExtensions
IDisposableObject
implementsIBasicDisposableObject
now- Many types which previously extended
Disposable(Record)Base
do now extend any of(Basic|Simple)(All|Async)Disposable(Record)Base
, which may have changed the disposing logic, the available base disposable features (events, etc.) and their interfaces Cancellations
andCombinedCancellationTokenSource
are obsolete now (useCancellationTokenSource.CreateLinkedTokenSource
instead)MemoryPoolStream
uses aMemoryPool<byte>
now (beforeArrayPool<byte>
)- Using
MemoryPool<T>
andRentedMemory(Ref)<T>
where possible (many places) MemoryPoolStream
length is now limited toint.MaxValue - 1
Additions
- Added
OptionValue<t1..t8>
- Added
EitherValue<t1..t8>
- Added
PipelineStream
- Added
IPipelineResult(Buffer|Stream)
- Added
PipelineElementBase
- Added
PipelineResultBase
- Added
PipelineResult((Rented)Buffer|Stream)
StreamBase.Ensure(Seek|Writ|Read)able
are virtual now- Added
PipelineResultReadOnlyBuffer
- Added
PipelineElementDynamic
- Added
PipelineElementStream
- Added
IPipelineElementObject(<T>)
- Added
IPipelineResultObject(<T>)
- Added
PipelineElement(Generic)ObjectBase
- Added
PipelineResultObject<T>
- Added
NullValueException
- Added
EnumerableExtensions.Distinct(By)Async
- Added
EnumerableExtensions.ExecuteResult<T>
- Added
PipelineStreamTable
- Added
EnumerableExtensions.(Where|Skip|Take|Select|Distinct(By)|First(OrDefault))
forImmutableArray<T>
andFrozenSet<T>
- Added
AsyncEnumerableExtensions.(Where|Skip|Take|Select|Distinct(By)|First(OrDefault))Async
forIAsyncEnumerable<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
DisposableExtensions.DisposeAll
forIDisposable[]
,(I)List<IDisposable>
,ImmutableArray<IDisposable>
andFrozenSet<IDisposable>
- Added
AsyncDisposableExtensions.DisposeAll
forIAsyncDisposable[]
,(I)List<IAsyncDisposable>
,ImmutableArray<IAsyncDisposable>
andFrozenSet<IAsyncDisposable>
- Added
ArrayExtensions.Contains(All|Any)
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
BytesExtensions.ToHexString
forSpan<byte>
,(ReadOnly)Memory<byte>
andbyte[]
- Added
ChangeCallbackExtensions.Invoke
for(I)List<ChangeCallback>
,ImmutableArray<ChangeCallback>
andFrozenSet<ChangeCallback>
- Added
DelegateExtensions.InvokeAll
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
ObjectMappingExtensions.MapObjectsToAsync
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
ObjectMappingExtensions.MapToAsync
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
ObjectMappingExtensions.MapObjectsTo
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
ObjectMappingExtensions.MapTo
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
OptInOutExtensions.FilterOpt(In(Only)|Out)
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
VersioningExtensions.FilterByVersion
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
AsyncEnumerableExtensions.(All|Any)Async
- Added
EnumerableExtensions.(All|Any)
forImmutableArray<T>
andFrozenSet<T>
- Added
HumanReadableUnits.ProgressTimeSpanUnits
- Added
HumanReadableUnits.POWERS_OF_(TWO|TEN)
- Added
HumanReadableUnits.ByteUnits2
- Added
HumanReadableUnits.FormatBytesFull
- Added
HumanReadableUnits.ByteUnitsShort
StringExtensions.Parse
allows anyIDictionary<string, string>
asdata
parameter nowStringParserContext.(Data|Parsed)
isIDictionary<string, string>
now- Added
DisposableHelper.TryDisposeAll
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
AsyncDisposableHelper.TryDisposeAll
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
ParallelExtensions
- Added
IBasicDisposableObject
- Added
Basic(All|Async)Disposable(Record)Base
(which isn't anIDisposableObject
!) - Added
ENV.ClrPlatformTarget
- Added
MemoryPoolExtensions
- Added
RentedMemory(Ref)<T>
- Added
MemoryOwner<T>
which implementsIMemoryOwner<T>
and can wrap any existingMemory<T>
MemoryPoolStream
can now be initialized with a copy-free memory from a memory pool (IMemoryOwner<T>
) or by wrapping any existingMemory<byte>
withMemoryOwner<byte>
MemoryPoolStream
can now be read-only with thebyte[]
orIMemoryOwner<byte>
constructor parameter, ifwritable
was set tofalse
- The
MemoryPoolStream
constructor with an existingbyte[]
parameter won't copy the given array if read-only - Added
MemoryPoolStream
constructor overloads forReadOnly(Span|Memory)<byte>
- Added parameters
offset
andlength
for manyEnumerableExtensions
methods - Added
Settings.ClearBuffers
- Added
AppConfig.ClearBuffers
Rented(Array|Memory)*.Clear
usesSettings.ClearBuffers
per default now- Added
ArrayPoolStream
- Added
Freezable(Array|Memory)PoolStream
- Added
FreezableList.RemoveRange
MemoryPoolStream
now usesSettings.ClearBuffers
for the defaultCleanReturned
property value of an instance- Added
MemorySequenceSegment<T>
- Added
MemoryPoolStream.ToReadOnlySequence
Removals
- Removed
EnumerableExtensions
for(ReadOnly)Memory<T>
because of bad performance when having to accessSpan
while iterating - Removed
(Async)DisposableExtensions
for(ReadOnly)Memory<T>
because of bad performance when having to accessSpan
while iterating
Fixed bugs
- Fixed
OptInOutExtensions.FilterOptOut
filtered opt-in elements - Fixed
HumanReadableUnits.FormatBytes
wrong formatting for values greater than ExaByte - Fixed
SimpleDisposable(Record)Base
destructor locked for disposing and missing creation stack information - Fixed
XmlDocComments
descriptions are trimmed now
Full Changelog: v2.38.0...v2.39.0