Skip to content

Releases: fsprojects/FSharp.Control.TaskSeq

TaskSeq 0.4.0

18 Mar 02:51
Compare
Choose a tag to compare

Nuget

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 over StartAsTask
  • #227 Prefer IDisposable over IAsyncDisposable in internal seq-cache code (by @bartelink)
  • #235 Improve performance of takeWhileXXX and skipWhileXXX functions (in coop with @bartelink)
  • #193 Deprecate some utility functions (see below)
  • #193 Deprecate taskSeq<_> in favor of type TaskSeq<_> for parity with AsyncSeq<_> and naming guidelines (the CE remains taskSeq)
  • #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

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> to TaskSeq<'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

18 Mar 02:50
Compare
Choose a tag to compare
TaskSeq 0.4.0-alpha.1 Pre-release
Pre-release

Nuget

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 with use! 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 (like let! x = async { ... }) etc) (based on ideas by @dsyme)
  • #127 Raise ArgumentNullException for any nullable arguments (parity behavior with F#'s Seq)
  • #122, #126 Add functions to TaskSeq module:

Other

  • Update readme to contain complete list of available functionality
  • Dependency updates (with @dependabot)

Changelog

TaskSeq 0.3.0

18 Mar 02:50
Compare
Choose a tag to compare

Nuget

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 in do! statements (part of task-parity)
  • #89 Optimize the static TaskSeq.empty<_> (by @gusty)
  • #75 Extension for task CE to support for .. in someTaskSeq do ... in normal tasks (by @TheAngryByrd)
  • #75 Extension for async CE to support for .. in someTaskSeq do ... in normal Async comprehensions (by @TheAngryByrd)
  • #90 Add functions to TaskSeq module:
  • #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

18 Mar 02:48
Compare
Choose a tag to compare

Nuget

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 (use toArrayAsync 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 with toSeq
  • If you used toSeqCachedAsync, replace all calls with toArrayAsync

Changelog

TaskSeq 0.2.1

18 Mar 02:48
Compare
Choose a tag to compare

Nuget

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

Changelog

TaskSeq 0.2.0

18 Mar 02:47
c236b1a
Compare
Choose a tag to compare

Nuget

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

Changelog

TaskSeq 0.1.1

18 Mar 02:41
Compare
Choose a tag to compare

Nuget

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

18 Mar 02:39
Compare
Choose a tag to compare

Nuget

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 in TaskSeq.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, for taskSeq { let! foo = someTask() }
    • Support For, While for taskSeq { for current in someTaskSeq do ... }
    • Support Yield for taskSeq { yield "hello world" }
    • Support YieldFrom for taskSeq { yield! anotherTaskSeq } with overload for normal sequences
    • Support Using for taskSeq { use ... } and taskSeq { use! ... }
    • Support TryFinally and TryWith for taskSeq { try .. with | try .. finally }
    • Support Zero for taskSeq { do () }
    • Support Combine for supporting multiple let!
  • #59 Drop ReturnFrom from taskSeq 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

Changelog