- Added
AsyncSeq.windowed— produces a sliding window of a given size over an async sequence (PR #241). - Added
AsyncSeq.reduceandAsyncSeq.reduceAsync— folds without a seed value, mirroringSeq.reduce(PR #242). - Added
AsyncSeq.sumBy,AsyncSeq.sumByAsync,AsyncSeq.average,AsyncSeq.averageBy, andAsyncSeq.averageByAsync— numeric aggregation combinators mirroring the correspondingSeqmodule functions (PR #245). - Added
AsyncSeq.min,AsyncSeq.max,AsyncSeq.minBy,AsyncSeq.maxBy,AsyncSeq.minByAsync, andAsyncSeq.maxByAsync— min/max aggregation combinators mirroringSeq.min/Seq.max/Seq.minBy/Seq.maxBy(PR #243). - Added
AsyncSeq.distinct,AsyncSeq.distinctBy,AsyncSeq.distinctByAsync,AsyncSeq.countBy,AsyncSeq.countByAsync,AsyncSeq.exactlyOne, andAsyncSeq.tryExactlyOne— set-membership and cardinality combinators mirroring the correspondingSeqmodule functions (PR #249).
- Breaking:
AsyncSeq<'T>is nowSystem.Collections.Generic.IAsyncEnumerable<'T>(the BCL type).ofAsyncEnumandtoAsyncEnumare now identity functions and marked[<Obsolete>]. Code that directly calls.GetEnumerator()/.MoveNext()must switch to.GetAsyncEnumerator(ct)/.MoveNextAsync()(#230, PR #231). - Added
YieldFromoverload forseq<'T>inasyncSeqcomputation expression —yield! itemsnow works whenitemsis aseq<'T>(#123, PR #236). - Added
[<CompilerMessage>]warning togroupByandgroupByAsyncto alert users that results must be consumed with a parallel combinator to avoid deadlock (#125, PR #235). - Added
AsyncSeq.mapAsyncUnorderedParallelThrottledfor throttled unordered parallel mapping (#31, PR #225). - Fixed
ofAsyncEnumdeadlock on single-threaded runtimes such as Blazor WASM (#152, PR #229). - Updated
PackageLicenseExpression(removed deprecatedPackageLicenseUrl) and updatedMicrosoft.Bcl.AsyncInterfacesto 10.0.3 (#168, PR #228).
- Quick summary of changes:
- Performance improvements: optimized
iterAsyncanditeriAsync; optimizedcollect,mapAsyncandunfoldAsync; fixed append memory leak (Issue #35). - Added
mapAsyncUnorderedParallelfor improved parallel performance. - Added
AsyncSeq.chunkByandAsyncSeq.chunkByAsyncfor grouping consecutive elements by key (#156, PR #222). AsyncSeq.mergeAllnow acceptsseq<AsyncSeq<'T>>instead oflist<AsyncSeq<'T>>for broader compatibility (#165, PR #221).- Set up BenchmarkDotNet for systematic benchmarking; performance benchmarks show measurable improvements (addresses Round 1 & 2 of #190).
- Build/CI updates: configuration and build-step updates.
- Performance improvements: optimized
- Release latest
- Sorting functions #126
- Update publishing
- Restore netstandard2.0 (and thereby .NET Framework 4.6.1+) compatibility
- Update build env versions to current recommendations
- Adjust to ensure all tests pass and eliminate warnings in vscode (ionide) and visual studio
- Include .fsi files into Fable package path #118
- Move to only netstandard 2.1
- Adding ofIQueryable #112
- Adding .NET IAsyncEnumerable conversion functions (ofAsyncEnum and toAsyncEnum) #96
- Rename toList and toArray to toListSynchronously and toArraySynchronously
- Add ofSeqAsync and concat
- Improve parallelism of AsyncSeq.cache
- Fix packaging issues
- Reference FSharp.Core 4.3 for nestandard builds
- Fix packaging issues
- Reference FSharp.Core 4.3 for nestandard builds
- Fix packaging issues
- Reference FSharp.Core 4.3 for nestandard builds
- Target .NET Standard
- Target .NET Standard
- AsyncSeq.mergeAll min-max fairness
- Improve performance of internal Async.chooseTasks function which improves performance of AsyncSeq.bufferByCountAndTime, etc (#73)
- Fix previous package deployment
- NEW: AsyncSeq.bufferByTime
- BUG: Fixed head of line blocking in AsyncSeq.mapAsyncParallel
- NEW: AsyncSeq.takeWhileInclusive
- NEW: AsyncSeq.replicateUntilNoneAsync
- NEW: AsyncSeq.iterAsyncParallel
- NEW: AsyncSeq.iterAsyncParallelThrottled
- BUG: Fixed exception propagation in AsyncSeq.mapAsyncParallel
- Fix bug #63 in AsyncSeq.unfold >> AsyncSeq.choose
- Fixed bug in AsyncSeq.cache when used by interleaved consumers.
- AsyncSeq.zipWithAsyncParallel (and variants)
- Improved asyncSeq workflow performance via bindAsync generator (@pragmatrix)
- Much improved append performance.
- Direct implementation of unfoldAsync as IAsyncEnumerable, with chooseAsync, mapAsync and foldAsync overrides
- Add portable7 profile
- Fix bug in Async.cache #33
- Fix leak in AsyncSeq.append and other derived generators
- Add AsyncSeq.sum, length, contains, exists, forall, tryPick, tryFind
- Simplify ofObservableBuffered and toBlockingSeq
- Move to IAsyncEnumerable model to support try/finally and try/with
- Rename replicate to replicateInfinite
- Rename toList to toListAsync
- Rename toArray to toArrayAsync
- Rename zipWithIndexAsync to mapiAsync
- Rename interleave to interleaveChoice
- Add interleave
- Add mergeChoice
- Fix performance of mergeAll
- Add init, initInfinite
- Add initAsync, initInfiniteAsync, replicateInfinite
- Add RequireQualifiedAccess to AsyncSeq
- Add AsyncSeq.getIterator (unblocks use of AsyncSeq in FSharpx.Async)
- Cancellable AsyncSeq.toBlockingSeq
- Fix AsyncSeq.scanAsync to also return first state
- Add a signature file
- AsyncSeq got extracted as separate project and is now a dependency - fsprojects/FSharpx.Async#24
- Renamed to FSharp.Control.AsyncSeq
- Remove surface area
- Hide Nil/Cons from representation of AsyncSeq
- Added Async.bindChoice, Async.ParallelIgnore, AsyncSeq.zipWithAsync, AsyncSeq.zappAsync, AsyncSeq.threadStateAsync, AsyncSeq.merge, AsyncSeq.traverseOptionAsync, AsyncSeq.traverseChoiceAsync
- Added AsyncSeq.toList, AsyncSeq.toArray, AsyncSeq.bufferByCount, AsyncSeq.unfoldAsync, AsyncSeq.concatSeq, AsyncSeq.interleave
- Copied the AsyncSeq from FSharpx.Async
- BUGFIX: AsyncSeq.skipWhile skips an extra item - #2
- BUGFIX: AsyncSeq.skipWhile skips an extra item - #2
- BUGFIX: AsyncSeq.toBlockingSeq does not hung forever if an exception is thrown and reraise it outside - #21