Releases: fsprojects/FSharp.Control.TaskSeq
TaskSeq 0.4.0
Version 0.4.0, 17 Mar, 2024
This is a long term stable NuGet release, with some major features added.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Special thanks for this release goes to Ruben Bartelink (@bartelink) for tirelessly reviewing all PRs, proofreading and fixing a lot of documentation, and providing valuable insight into several complex use cases.
Bug fixes
- #220, #234 Fix bug: several documentation errors (by @bartelink)
- #198 Fix bug: NU1605 (package downgrade warnings in test env)
- TBD (will fill these in in the coming days, or see changelog below)
Features
- #136, #216 Full rewrite of all XML doc / tooltip / param info documentation of the public surface area
- #135 Performance improvement by preferring
StartImmediateAsTask
overStartAsTask
- #227 Prefer
IDisposable
overIAsyncDisposable
in internal seq-cache code (by @bartelink) - #235 Improve performance of
takeWhileXXX
andskipWhileXXX
functions (in coop with @bartelink) - #193 Deprecate some utility functions (see below)
- #193 Deprecate
taskSeq<_>
in favor of typeTaskSeq<_>
for parity withAsyncSeq<_>
and naming guidelines (the CE remainstaskSeq
) - #184 Make
module TaskSeq
->type TaskSeq
(static class) to allow overloads (see below) - #208 (overview); #209, #217, #219, #221, #235, #236, #237, #240, #130 Add functions to
TaskSeq
module:- Add
concat
(for array) - Add
concat
(for list) - Add
concat
(for resizearray) - Add
concat
(for seq) - Add
forall
- Add
forallAsync
- Add
insertAt
- Add
insertManyAt
- Add
max
- Add
maxBy
- Add
maxByAsync
- Add
min
- Add
minBy
- Add
minByAsync
- Add
removeAt
- Add
removeManyAt
- Add
skip
- Add
skipWhile
- Add
skipWhileAsync
- Add
skipWhileInclusive
- Add
skipWhileInclusiveAsync
- Add
take
- Add
truncate
- Add
updateAt
- Add
where
- Add
whereAsync
- Add
Other
- Update readme to contain complete list of available functionality
- #211 Fancier badge (by @bartelink)
- Dependency updates (with @dependabot)
- 99.5% test coverage of all exposed functions and types
Upgrade guide (compatibility)
The changes in this version may raise deprecation warnings. All function and type renames have kept the old name around, but with a deprecation warning when you use it.
To get rid of those warnings, follow instructions shown in the warnings:
- Rename any type annotation
taskSeq<'T>
toTaskSeq<'T>
- Rename any
ValueTask.ofIValueTaskSource
->ValueTask.ofSource
- Rename any
ValueTask.FromResult
->ValueTask.fromResult
Binary incompatibility
The change from module to static class for TaskSeq
has no effect on existing code, however it is a binary incompatibility. This means that you cannot replace an existing FSharp.Control.TaskSeq.dll
of a previous version, with one of v0.4.0 or higher. You must recompile, or you may get "member not found" exceptions.
Changelog
TaskSeq 0.4.0-alpha.1
Version 0.4.0-alpha.1, 5 Jun, 2023
This is an alpha release that, however, proved to be remarkably stable.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Bug fixes
- #157 Fix bug: ensure that
Dispose
is called withuse!
etc (by @bartelink) - #121 Fix bug: make FSharp.Core 6.0.1 the minimum dependency (was 6.0.2) for maximum compatibility
- #125 Fix bug: numerous typos in xml docs and other tweaks (by @bartelink)
- #134 Fix bug: unified approach to naming generic type names in exposed functions
- #137 Fix bug: remove
release-notes.txt
from distributed NuGet package content files (but do expose to NuGet interface)
Features
- #79 Interoperability with
Async<_>
in bindings (likelet! x = async { ... }
) etc) (based on ideas by @dsyme) - #127 Raise
ArgumentNullException
for any nullable arguments (parity behavior with F#'sSeq
) - #122, #126 Add functions to
TaskSeq
module:- Add
takeWhile
(by @bartelink) - Add
takeWhileAsync
(by @bartelink) - Add
takeWhileInclusive
(by @bartelink) - Add
takeWhileInclusiveAsync
(by @bartelink)
- Add
Other
- Update readme to contain complete list of available functionality
- Dependency updates (with @dependabot)
Changelog
TaskSeq 0.3.0
Version 0.3.0, 28 Nov, 2022
This is a long term stable NuGet release, with some major features added.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Bug fixes
- #32 Fix bug: do not raise when two task sequences have unequal length in
TaskSeq.zip
- #97 Fix bug: dispose correctly of disposable resources (by @peterfaria-lula)
- #94 Fix bug: release notes and icon should not be part of the content files in a package
- #113 Fix bug: properly raise exceptions in
ValueTask.ignore
(based on ideas by @stephentoub)
Features
- #110 support any task-like tasks (anything that exposes an awaiter method), (part of
task
-parity) - #43 support non-generic
Task
indo!
statements (part oftask
-parity) - #89 Optimize the static
TaskSeq.empty<_>
(by @gusty) - #75 Extension for
task
CE to supportfor .. in someTaskSeq do ...
in normal tasks (by @TheAngryByrd) - #75 Extension for
async
CE to supportfor .. in someTaskSeq do ...
in normal Async comprehensions (by @TheAngryByrd) - #90 Add functions to
TaskSeq
module:- Add
singleton
(by @gusty)
- Add
- #112 Hide helper functions that should never have been exposed to begin with
Other
- Update readme to contain complete list of available functionality
- Dependency updates (with @dependabot)
- Almost 100% code coverage by tests
- A first stab at performance testing
Changelog
TaskSeq 0.2.2
Version 0.2.2, 10 Nov, 2022
This is a minor NuGet release removing / renaming odd functions.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Bug fixes
- a2ef397 Fix bug: remove undocumented
toSeqCachedAsync
, which didn't add any functionality (usetoArrayAsync
or similar instead)
Features
Upgrade guide (compatibility)
This version introduces a small incompatibility. However, the mentioned functions were not documented and likely rarely, if ever, used in these early stages of the TaskSeq
project.
- If you used
toSeqCached
, replace all calls withtoSeq
- If you used
toSeqCachedAsync
, replace all calls withtoArrayAsync
Changelog
TaskSeq 0.2.1
Version 0.2.1, 10 Nov, 2022
This is a minor NuGet release that introduces the first caching-enabled function to the surface area: TaskSeq.except
.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Bug fixes
- 47dedbd Fix bug: remove undocumented
toSeqOfTasks
, it exposed overlapping execution of tasks - Dependency updates (by @dependabot)
Features
- #87 Add MIT license
- #87 Initial NuGet package settings for automation
- 600cea5 Add
ValueTask.CompletedTask
and expose - #83 Add functions to
TaskSeq
module:- Add
except
- Add
exceptOfSeq
- Add
Changelog
TaskSeq 0.2.0
Version 0.2.0, 9 Nov, 2022
This is a long term stable NuGet release, after extensive testing, with minor additions since the previous releases.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Bug fixes
- 8486e1b Fix bug: un-nest Task in
Task.bind
helper
Features
- #82, #81, #76 Add functions to
TaskSeq
module:- Add
append
- Add
appendSeq
- Add
delay
- Add
prependSeq
- Add
tail
- Add
tryTail
- Add
Changelog
TaskSeq 0.1.1
Version 0.1.1, 5 Nov, 2022
This is a minor release that updated the metadata in the NuGet package.
Summary of changes:
Changes implemented by @abelbraaksma unless otherwise noted.
Bug fixes
Nothing to report.
Features
- #74 Create
readme.md
for NuGet package, with overview of available functions
Changelog
Initial release 0.1.0
Version 0.1.0, 4 Nov, 2022
This very first release features a fully functional taskSeq { .... }
computation expression and a decent surface area coverage of module functions. All relevant issues and PR's are listed as part of milestone v0.1.0.
Summary of changes
Changes implemented by @abelbraaksma unless otherwise noted.
Bugs fixed
- #25 Fix bug: empty task sequences may have race conditions and run forever
- #39 Fix bug: multiple iterations over some task seqs can lead to
InvalidOperationException
- #65 Fix bug: prevent
MoveNext
when not necessary inTaskSeq.item
/tryItem
- #49 Fix bug: state machine resumption back to zero after reset (by @dsyme)
Features added
- #72 Put everything in namespace
FSharp.Control
(per @dsyme's suggestions) - #2, #51 etc CE
taskSeq { ... }
using resumable code (based on original ideas by @dsyme, @gusty and @rspeele, see tasks.fs):- Support
Bind
, fortaskSeq { let! foo = someTask() }
- Support
For
,While
fortaskSeq { for current in someTaskSeq do ... }
- Support
Yield
fortaskSeq { yield "hello world" }
- Support
YieldFrom
fortaskSeq { yield! anotherTaskSeq }
with overload for normal sequences - Support
Using
fortaskSeq { use ... }
andtaskSeq { use! ... }
- Support
TryFinally
andTryWith
fortaskSeq { try .. with | try .. finally }
- Support
Zero
fortaskSeq { do () }
- Support
Combine
for supporting multiplelet!
- Support
- #59 Drop
ReturnFrom
fromtaskSeq
computation expression - #34 Consistent naming style as F#
Seq
functions - #2, #18, #20, #23, #31, #53, #67, #68, #69, #70 and issues #22, #38 Add functions to
TaskSeq
module:- Add
box
- Add
cast
- Add
choose
,chooseAsync
- Add
collect
,collectAsync
- Add
collectSeq
,collectSeqAsync
- Add
concat
- Add
contains
- Add
empty<_>
- Add
exactlyOne
- Add
exists
,existsAsync
- Add
filter
,filterAsync
- Add
find
,findAsync
- Add
findIndex
,findIndexAsync
- Add
fold
,foldAsync
- Add
head
- Add
indexed
- Add
init
,initAsync
- Add
initInfinite
,initInfiniteAsync
- Add
isEmpty
- Add
item
- Add
iter,
iterAsync` - Add
iteri
,iteriAsync
- Add
last
- Add
length
- Add
lengthBy
,lengthByAsync
- Add
lengthOrMax
- Add
map
,mapAsync
- Add
mapi
,mapiAsync
- Add
ofArray
- Add
ofAsyncArray
- Add
ofAsyncList
- Add
ofAsyncSeq
- Add
ofList
- Add
ofResizeArray
- Add
ofSeq
- Add
ofTaskArray
- Add
ofTaskList
- Add
ofTaskSeq
- Add
pick
,pickAsync
- Add
toArray
- Add
toArrayAsync
- Add
toIListAsync
- Add
toList
- Add
toListAsync
- Add
toResizeArrayAsync
- Add
toSeqCachedAsync
- Add
tryExactlyOne
- Add
tryFind
,tryFindAsync
- Add
tryFindIndex
,tryFindIndexAsync
- Add
tryHead
- Add
tryItem
- Add
tryLast
- Add
tryPick
,tryPickAsync
- Add
unbox
- Add
zip
- Add