From c957ac13cb699728df852b633e25f785461c00f8 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sun, 8 Mar 2026 02:12:23 +0000 Subject: [PATCH 1/3] bump version --- README.md | 8 ++++---- Version.props | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 57a47784..dcc1cbf5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ An implementation of [`IAsyncEnumerable<'T>`][3] as a computation expression: `taskSeq { ... }` with an accompanying `TaskSeq` module and functions, that allow seamless use of asynchronous sequences similar to F#'s native `seq` and `task` CE's. -* Latest stable version: [0.4.0 is on NuGet][nuget]. +* Latest stable version is [on NuGet][nuget]. ## Release notes @@ -170,7 +170,7 @@ let feedFromTwitter user pwd = taskSeq { ## Choosing between `AsyncSeq` and `TaskSeq` -The [`AsyncSeq`][11] and `TaskSeq` libraries both operate on asynchronous sequences, but there are a few fundamental differences. The most notable being that the former _does not_ implement `IAsyncEnumerable<'T>`, though it does have a type of that name with different semantics (not surprising; it predates the definition of the modern one). Another key difference is that `TaskSeq` uses `ValueTask`s for the asynchronous computations, whereas `AsyncSeq` uses F#'s `Async<'T>`. +The [`AsyncSeq`][11] and `TaskSeq` libraries both operate on asynchronous sequences, but there are a few fundamental differences. The most notable being that `TaskSeq` uses `ValueTask`s and state machines for asynchronous computations with much lower overhead, whereas `AsyncSeq` uses F#'s `Async<'T>`. There are more differences: @@ -178,7 +178,7 @@ There are more differences: |----------------------------|---------------------------------------------------------------------------------|----------------------------------------------------------------------| | **Frameworks** | .NET 5.0+, NetStandard 2.1 | .NET 5.0+, NetStandard 2.0 and 2.1, .NET Framework 4.6.1+ | | **F# concept of** | `task` | `async` | -| **Underlying type** | [`Generic.IAsyncEnumerable<'T>`][3] [note #1](#tsnote1 "Full name System.Collections.Generic.IAsyncEnumerable<'T>.")| Its own type, also called `IAsyncEnumerable<'T>`[note #1](#tsnote1 "Full name FSharp.Control.IAsyncEnumerable<'T>.") | +| **Underlying type** | [`IAsyncEnumerable<'T>`][3] [note #1](#tsnote1 "Full name System.Collections.Generic.IAsyncEnumerable<'T>.")| Its own type, also called `IAsyncEnumerable<'T>`[note #1](#tsnote1 "Full name System.Collections.Generic.IAsyncEnumerable<'T>.") | | **Implementation** | State machine (statically compiled) | No state machine, continuation style | | **Semantics** | `seq`-like: on-demand | `seq`-like: on-demand | | **Disposability** | Asynchronous, through [`IAsyncDisposable`][7] | Synchronous, through `IDisposable` | @@ -195,7 +195,7 @@ There are more differences: | **[`Current`][5]** | [Returns `'T`][5] | n/a | | **Cancellation** | See [#133][], until 0.3.0: use `GetAsyncEnumerator(cancelToken)` | Implicit token flows to all subtasks per `async` semantics | | **Performance** | Very high, negligible allocations | Slower, more allocations, due to using `async` and cont style | -| **Parallelism** | Unclear, interface is meant for _sequential/async_ processing | Supported by extension functions | +| **Parallelism** | Interface is meant for _sequential/async_ processing | Supported by extension functions | ¹⁾ _Both `AsyncSeq` and `TaskSeq` use a type called `IAsyncEnumerable<'T>`, but only `TaskSeq` uses the type from the BCL Generic Collections. `AsyncSeq` supports .NET Framework 4.6.x and NetStandard 2.0 as well, which do not have this type in the BCL._ diff --git a/Version.props b/Version.props index 2ec8b638..afaaaea1 100644 --- a/Version.props +++ b/Version.props @@ -1,6 +1,6 @@ - 0.4.0 + 0.6.0 \ No newline at end of file From 642acc392dcceabf6bc360d28ca1aeadc8231957 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sun, 8 Mar 2026 02:13:37 +0000 Subject: [PATCH 2/3] bump version --- .github/aw/actions-lock.json | 14 ++++++++++++++ .../FSharp.Control.TaskSeq.SmokeTests.fsproj | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .github/aw/actions-lock.json diff --git a/.github/aw/actions-lock.json b/.github/aw/actions-lock.json new file mode 100644 index 00000000..eecf086c --- /dev/null +++ b/.github/aw/actions-lock.json @@ -0,0 +1,14 @@ +{ + "entries": { + "actions/github-script@v8": { + "repo": "actions/github-script", + "version": "v8", + "sha": "ed597411d8f924073f98dfc5c65a23a2325f34cd" + }, + "github/gh-aw/actions/setup@v0.55.0": { + "repo": "github/gh-aw/actions/setup", + "version": "v0.55.0", + "sha": "e211c855a20aa6cf9297b411466e1c382a8686db" + } + } +} diff --git a/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj b/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj index 7b3f3e99..caa5d587 100644 --- a/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj +++ b/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj @@ -23,7 +23,7 @@ highest version available. This ensures that, if we have a forwards compat issue, we will get an error. --> - + From 741b50a07ebd648d19f6e4b15f8af79319b01492 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sun, 8 Mar 2026 02:23:54 +0000 Subject: [PATCH 3/3] bump version --- .../FSharp.Control.TaskSeq.SmokeTests.fsproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj b/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj index caa5d587..7b3f3e99 100644 --- a/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj +++ b/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj @@ -23,7 +23,7 @@ highest version available. This ensures that, if we have a forwards compat issue, we will get an error. --> - +