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 75c962ec..a8fbec80 100644
--- a/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj
+++ b/src/FSharp.Control.TaskSeq.SmokeTests/FSharp.Control.TaskSeq.SmokeTests.fsproj
@@ -9,13 +9,16 @@
+
+
+
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.PocTests.fs b/src/FSharp.Control.TaskSeq.SmokeTests/TaskSeq.PocTests.fs
similarity index 100%
rename from src/FSharp.Control.TaskSeq.Test/TaskSeq.PocTests.fs
rename to src/FSharp.Control.TaskSeq.SmokeTests/TaskSeq.PocTests.fs
diff --git a/src/FSharp.Control.TaskSeq.SmokeTests/TestUtils.fs b/src/FSharp.Control.TaskSeq.SmokeTests/TestUtils.fs
new file mode 100644
index 00000000..deb01c98
--- /dev/null
+++ b/src/FSharp.Control.TaskSeq.SmokeTests/TestUtils.fs
@@ -0,0 +1,131 @@
+namespace TaskSeq.Tests
+
+open System
+open System.Threading
+open System.Threading.Tasks
+open System.Diagnostics
+open System.Collections.Generic
+
+open Xunit
+open Xunit.Abstractions
+open FsUnit.Xunit
+
+open FSharp.Control
+
+/// Milliseconds
+[]
+type ms
+
+/// Microseconds
+[]
+type µs
+
+/// Helpers for short waits, as Task.Delay has about 15ms precision.
+/// Inspired by IoT code: https://github.com/dotnet/iot/pull/235/files
+module DelayHelper =
+
+ let private rnd = Random()
+
+ ///
+ /// Delay for at least the specified .
+ ///
+ /// The number of microseconds to delay.
+ ///
+ /// True to allow yielding the thread. If this is set to false, on single-proc systems
+ /// this will prevent all other code from running.
+ ///
+ let spinWaitDelay (microseconds: int64<µs>) (allowThreadYield: bool) =
+ let start = Stopwatch.GetTimestamp()
+ let minimumTicks = int64 microseconds * Stopwatch.Frequency / 1_000_000L
+
+ // FIXME: though this is part of official IoT code, the `allowThreadYield` version is extremely slow
+ // slower than would be expected from a simple SpinOnce. Though this may be caused by scenarios with
+ // many tasks at once. Have to investigate. See perf smoke tests.
+ if allowThreadYield then
+ let spinWait = SpinWait()
+
+ while Stopwatch.GetTimestamp() - start < minimumTicks do
+ spinWait.SpinOnce(1)
+
+ else
+ while Stopwatch.GetTimestamp() - start < minimumTicks do
+ Thread.SpinWait(1)
+
+ let delayTask (µsecMin: int64<µs>) (µsecMax: int64<µs>) f = task {
+ let rnd () = rnd.NextInt64(int64 µsecMin, int64 µsecMax) * 1L<µs>
+
+ // ensure unequal running lengths and points-in-time for assigning the variable
+ // DO NOT use Thead.Sleep(), it's blocking!
+ // WARNING: Task.Delay only has a 15ms timer resolution!!!
+
+ // TODO: check this! The following comment may not be correct
+ // this creates a resume state, which seems more efficient than SpinWait.SpinOnce, see DelayHelper.
+ let! _ = Task.Delay 0
+ let delay = rnd ()
+
+ // typical minimum accuracy of Task.Delay is 15.6ms
+ // for delay-cases shorter than that, we use SpinWait
+ if delay < 15_000L<µs> then
+ do spinWaitDelay (rnd ()) false
+ else
+ do! Task.Delay(int <| float delay / 1_000.0)
+
+ return f ()
+ }
+
+///
+/// Creates dummy backgroundTasks with a randomized delay and a mutable state,
+/// to ensure we properly test whether processing is done ordered or not.
+/// Default for and
+/// are 10,000µs and 30,000µs respectively (or 10ms and 30ms).
+///
+type DummyTaskFactory(µsecMin: int64<µs>, µsecMax: int64<µs>) =
+ let mutable x = 0
+
+ ///
+ /// Creates dummy tasks with a randomized delay and a mutable state,
+ /// to ensure we properly test whether processing is done ordered or not.
+ /// Uses the defaults for and
+ /// with 10,000µs and 30,000µs respectively (or 10ms and 30ms).
+ ///
+ new() = new DummyTaskFactory(10_000L<µs>, 30_000L<µs>)
+
+
+ /// Bunch of delayed tasks that randomly have a yielding delay of 10-30ms, therefore having overlapping execution times.
+ member _.CreateDelayedTasks_SideEffect total = [
+ for i in 0 .. total - 1 do
+ fun () -> DelayHelper.delayTask µsecMin µsecMax (fun _ -> Interlocked.Increment &x)
+ ]
+
+/// Just some dummy task generators, copied over from the base test project, with artificial delays,
+/// mostly to ensure sequential async operation of side effects.
+module Gen =
+ /// Joins two tasks using merely BCL methods. This approach is what you can use to
+ /// properly, sequentially execute a chain of tasks in a non-blocking, non-overlapping way.
+ let joinWithContinuation tasks =
+ let simple (t: unit -> Task<_>) (source: unit -> Task<_>) : unit -> Task<_> =
+ fun () ->
+ source()
+ .ContinueWith((fun (_: Task) -> t ()), TaskContinuationOptions.OnlyOnRanToCompletion)
+ .Unwrap()
+ :?> Task<_>
+
+ let rec combine acc (tasks: (unit -> Task<_>) list) =
+ match tasks with
+ | [] -> acc
+ | t :: tail -> combine (simple t acc) tail
+
+ match tasks with
+ | first :: rest -> combine first rest
+ | [] -> failwith "oh oh, no tasks given!"
+
+ let joinIdentityHotStarted tasks () = task { return tasks |> List.map (fun t -> t ()) }
+
+ let joinIdentityDelayed tasks () = task { return tasks }
+
+ let createAndJoinMultipleTasks total joiner : Task<_> =
+ // the actual creation of tasks
+ let tasks = DummyTaskFactory().CreateDelayedTasks_SideEffect total
+ let combinedTask = joiner tasks
+ // start the combined tasks
+ combinedTask ()
diff --git a/src/FSharp.Control.TaskSeq.Test/FSharp.Control.TaskSeq.Test.fsproj b/src/FSharp.Control.TaskSeq.Test/FSharp.Control.TaskSeq.Test.fsproj
index b6d84d11..43ac2020 100644
--- a/src/FSharp.Control.TaskSeq.Test/FSharp.Control.TaskSeq.Test.fsproj
+++ b/src/FSharp.Control.TaskSeq.Test/FSharp.Control.TaskSeq.Test.fsproj
@@ -42,7 +42,6 @@
-
@@ -52,10 +51,8 @@
-
-
-
-
+
+
diff --git a/src/FSharp.Control.TaskSeq.Test/Nunit.Extensions.fs b/src/FSharp.Control.TaskSeq.Test/Nunit.Extensions.fs
index 834afe02..eb67fecf 100644
--- a/src/FSharp.Control.TaskSeq.Test/Nunit.Extensions.fs
+++ b/src/FSharp.Control.TaskSeq.Test/Nunit.Extensions.fs
@@ -2,11 +2,11 @@ namespace TaskSeq.Tests
open System
open System.Threading.Tasks
+
open FsUnit
open NHamcrest.Core
open Microsoft.FSharp.Reflection
-open FsToolkit.ErrorHandling
open Xunit
open Xunit.Sdk
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Append.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Append.Tests.fs
index 8eb39454..32010192 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Append.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Append.Tests.fs
@@ -1,13 +1,9 @@
module TaskSeq.Tests.Append
-open System
-
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Collections.Generic
//
// TaskSeq.append
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.AsyncExtensions.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.AsyncExtensions.Tests.fs
index 1f0b9efd..62d58368 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.AsyncExtensions.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.AsyncExtensions.Tests.fs
@@ -1,6 +1,5 @@
module TaskSeq.Tests.AsyncExtensions
-open System
open Xunit
open FsUnit.Xunit
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Cast.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Cast.Tests.fs
index f63e9e9d..b8a423fe 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Cast.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Cast.Tests.fs
@@ -4,7 +4,6 @@ open System
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Choose.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Choose.Tests.fs
index b5376d5b..6258a760 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Choose.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Choose.Tests.fs
@@ -1,11 +1,9 @@
module TaskSeq.Tests.Choose
open System
-open System.Threading.Tasks
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Collect.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Collect.Tests.fs
index 6b71e075..48b1ec41 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Collect.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Collect.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.Collect
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Concat.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Concat.Tests.fs
index 6b9f3d68..352aa4c7 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Concat.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Concat.Tests.fs
@@ -1,13 +1,11 @@
module TaskSeq.Tests.Concat
-open System
+open System.Collections.Generic
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Collections.Generic
//
// TaskSeq.concat
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Contains.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Contains.Tests.fs
index 3d84956f..9b326a70 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Contains.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Contains.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.Contains
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Delay.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Delay.Tests.fs
index a13c9111..c437bebc 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Delay.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Delay.Tests.fs
@@ -1,13 +1,9 @@
module TaskSeq.Tests.Delay
-open System
-
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Collections.Generic
//
// TaskSeq.delay
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Do.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Do.Tests.fs
index 09c3c7b3..1f8badae 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Do.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Do.Tests.fs
@@ -1,7 +1,7 @@
module TaskSeq.Tests.Do
-open System
open System.Threading.Tasks
+
open FsUnit
open Xunit
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Empty.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Empty.Tests.fs
index 0e73b90f..219b21be 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Empty.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Empty.Tests.fs
@@ -3,7 +3,6 @@ module TaskSeq.Tests.Empty
open System.Threading.Tasks
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
@@ -42,7 +41,7 @@ let ``TaskSeq-empty of unit in a taskSeq context`` () = task {
[]
let ``TaskSeq-empty of more complex type in a taskSeq context`` () = task {
let! sq =
- taskSeq { yield! TaskSeq.empty, int>> }
+ taskSeq { yield! TaskSeq.empty, int>> } // not a TaskResult, but a ResultTask lol
|> TaskSeq.toArrayAsync
Array.isEmpty sq |> should be True
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.ExactlyOne.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.ExactlyOne.Tests.fs
index 0438086c..2a2a01d7 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.ExactlyOne.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.ExactlyOne.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.ExactlyOne
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Except.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Except.Tests.fs
index b0cda375..db49b2c0 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Except.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Except.Tests.fs
@@ -1,9 +1,7 @@
module TaskSeq.Tests.Except
-open System
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Exists.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Exists.Tests.fs
index 1fe3541c..04a652f5 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Exists.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Exists.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.Exists
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Filter.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Filter.Tests.fs
index 0dfe5963..fb67ad9f 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Filter.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Filter.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.Filter
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Find.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Find.Tests.fs
index 61a6e02e..9ad3ede8 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Find.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Find.Tests.fs
@@ -1,11 +1,11 @@
module TaskSeq.Tests.Find
+open System.Collections.Generic
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Collections.Generic
//
// TaskSeq.find
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.FindIndex.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.FindIndex.Tests.fs
index f65302b0..96a9e04c 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.FindIndex.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.FindIndex.Tests.fs
@@ -1,11 +1,11 @@
module TaskSeq.Tests.FindIndex
+open System.Collections.Generic
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Collections.Generic
//
// TaskSeq.findIndex
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Fold.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Fold.Tests.fs
index 1b0791b4..aa91c046 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Fold.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Fold.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.Fold
open System.Text
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Head.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Head.Tests.fs
index a1dc1993..af4cd8fc 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Head.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Head.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.Head
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Indexed.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Indexed.Tests.fs
index 4ebab7b6..0d69753d 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Indexed.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Indexed.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.Indexed
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Init.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Init.Tests.fs
index 0e65e47a..2c1a445c 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Init.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Init.Tests.fs
@@ -4,7 +4,6 @@ open System
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.IsEmpty.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.IsEmpty.fs
index 2d9de691..09925828 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.IsEmpty.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.IsEmpty.fs
@@ -1,9 +1,7 @@
module TaskSeq.Tests.IsEmpty
-open System.Threading.Tasks
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Item.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Item.Tests.fs
index 5e922f90..d2fb2708 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Item.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Item.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.Item
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Last.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Last.Tests.fs
index 82febc02..c74e8136 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Last.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Last.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.Last
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Length.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Length.Tests.fs
index 900aa539..ac8c3882 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Length.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Length.Tests.fs
@@ -1,9 +1,7 @@
module TaskSeq.Tests.Length
-open System
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Let.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Let.Tests.fs
index 5ebd14bd..e7c37844 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Let.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Let.Tests.fs
@@ -2,6 +2,7 @@ module TaskSeq.Tests.Let
open System
open System.Threading.Tasks
+
open FsUnit
open Xunit
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Map.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Map.Tests.fs
index 1f77c1f5..e266b3c9 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Map.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Map.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.Map
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.OfXXX.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.OfXXX.Tests.fs
index c32ad822..11354a3d 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.OfXXX.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.OfXXX.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.``Conversion-From``
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Pick.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Pick.Tests.fs
index 9fd7ac5c..e03c236b 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Pick.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Pick.Tests.fs
@@ -1,10 +1,9 @@
module TaskSeq.Tests.Pick
-open System
open System.Collections.Generic
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Realworld.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Realworld.fs
index 7ccf043f..f7c8594f 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Realworld.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Realworld.fs
@@ -2,14 +2,13 @@ namespace TaskSeq.Tests
open System
open System.IO
+open System.Threading.Tasks
+open System.Collections.Generic
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Threading.Tasks
-open System.Diagnostics
-open System.Collections.Generic
open Xunit.Abstractions
/// Just a naive, simple in-memory reader that acts as an IAsyncEnumerable to use with tests
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Singleton.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Singleton.Tests.fs
index aec6fbbf..71a07e9e 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Singleton.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Singleton.Tests.fs
@@ -2,7 +2,6 @@ module TaskSeq.Tests.Singleton
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug-delayed.Tests.CE.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug-delayed.Tests.CE.fs
index e5575da1..8eb699bf 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug-delayed.Tests.CE.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug-delayed.Tests.CE.fs
@@ -1,13 +1,9 @@
module TaskSeq.Tests.``Bug #42 -- asynchronous`` // see PR #42
open System
-open System.Threading.Tasks
-open System.Diagnostics
-open System.Collections.Generic
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug.Tests.CE.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug.Tests.CE.fs
index 1a421dbc..0861911e 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug.Tests.CE.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.StateTransitionBug.Tests.CE.fs
@@ -2,12 +2,10 @@ module TaskSeq.Tests.``Bug #42 -- synchronous`` // see PR #42
open System
open System.Threading.Tasks
-open System.Diagnostics
open System.Collections.Generic
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tail.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tail.Tests.fs
index 9ba6a8af..38868127 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tail.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tail.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.Tail
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.TakeWhile.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.TakeWhile.Tests.fs
index 7edc650c..30c15924 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.TakeWhile.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.TakeWhile.Tests.fs
@@ -1,9 +1,9 @@
module TaskSeq.Tests.TakeWhile
open System
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.TaskExtensions.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.TaskExtensions.Tests.fs
index 5d5316a4..0121663f 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.TaskExtensions.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.TaskExtensions.Tests.fs
@@ -1,6 +1,5 @@
module TaskSeq.Tests.TaskExtensions
-open System
open Xunit
open FsUnit.Xunit
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tests.CE.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tests.CE.fs
index cd7be9b1..d4fee3b0 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tests.CE.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Tests.CE.fs
@@ -4,7 +4,6 @@ open System
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.ToXXX.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.ToXXX.Tests.fs
index fbb5635b..082fe98d 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.ToXXX.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.ToXXX.Tests.fs
@@ -1,11 +1,11 @@
module TaskSeq.Tests.``Conversion-To``
+open System.Collections.Generic
+
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
-open System.Collections.Generic
////////////////////////////////////////////////////////////////////////////
/// ///
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Using.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Using.Tests.fs
index bf53f14d..557381e0 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Using.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Using.Tests.fs
@@ -2,6 +2,7 @@ module TaskSeq.Tests.Using
open System
open System.Threading.Tasks
+
open FSharp.Control
open FsUnit
open Xunit
diff --git a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Zip.Tests.fs b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Zip.Tests.fs
index 2ead6106..6ef461fb 100644
--- a/src/FSharp.Control.TaskSeq.Test/TaskSeq.Zip.Tests.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TaskSeq.Zip.Tests.fs
@@ -1,9 +1,7 @@
module TaskSeq.Tests.Zip
-open System
open Xunit
open FsUnit.Xunit
-open FsToolkit.ErrorHandling
open FSharp.Control
diff --git a/src/FSharp.Control.TaskSeq.Test/TestUtils.fs b/src/FSharp.Control.TaskSeq.Test/TestUtils.fs
index e97f3658..59c8dbb9 100644
--- a/src/FSharp.Control.TaskSeq.Test/TestUtils.fs
+++ b/src/FSharp.Control.TaskSeq.Test/TestUtils.fs
@@ -4,17 +4,13 @@ open System
open System.Threading
open System.Threading.Tasks
open System.Diagnostics
-
-open FsToolkit.ErrorHandling
-
-open FSharp.Control
open System.Collections.Generic
-open FsUnit.Xunit
+
open Xunit
open Xunit.Abstractions
-open System.Runtime.Serialization
-open System.Reflection
-open Microsoft.FSharp.Reflection
+open FsUnit.Xunit
+
+open FSharp.Control
/// Milliseconds
[]
@@ -28,6 +24,8 @@ type µs
/// Inspired by IoT code: https://github.com/dotnet/iot/pull/235/files
module DelayHelper =
+ let private rnd = Random()
+
///
/// Delay for at least the specified .
///
@@ -54,7 +52,6 @@ module DelayHelper =
Thread.SpinWait(1)
let delayTask (µsecMin: int64<µs>) (µsecMax: int64<µs>) f = task {
- let rnd = Random()
let rnd () = rnd.NextInt64(int64 µsecMin, int64 µsecMax) * 1L<µs>
// ensure unequal running lengths and points-in-time for assigning the variable
@@ -84,8 +81,6 @@ module DelayHelper =
///
type DummyTaskFactory(µsecMin: int64<µs>, µsecMax: int64<µs>) =
let mutable x = 0
- let rnd = Random()
- let rnd () = rnd.NextInt64(int64 µsecMin, int64 µsecMax) * 1L<µs>
let runTaskDelayed () = backgroundTask { return! DelayHelper.delayTask µsecMin µsecMax (fun _ -> Interlocked.Increment &x) }