diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index 8d43762..9ad3446 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -15,20 +15,20 @@ jobs: steps: - name: Check out code onto host - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup .Net 6.0 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: '6.0.x' # SDK Version to use. - name: Setup .Net 8.0 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: '8.0.x' # SDK Version to use. - name: Setup .Net 9.0 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: '9.0.x' # SDK Version to use. @@ -58,7 +58,7 @@ jobs: if: matrix.framework == 'net80' - name: Upload dotnet test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: dotnet-results-${{ matrix.os }}-${{ matrix.framework }} path: TestResults-${{ matrix.os }}-${{ matrix.framework }} @@ -66,7 +66,7 @@ jobs: if: ${{ always() }} - name: Upload BenchmarkDotNet results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: BenchmarkDotNet-${{ matrix.os }}-${{ matrix.framework }} path: BenchmarkDotNet.Artifacts @@ -84,13 +84,13 @@ jobs: steps: - name: Check out code onto host - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.3.1 + uses: microsoft/setup-msbuild@v2 - name: Setup .Net 8.0 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: '8.0.x' # SDK Version to use. @@ -114,7 +114,7 @@ jobs: dotnet test --no-restore --configuration Release --verbosity normal --framework=${{ matrix.framework }} --logger trx --results-directory "TestResults-${{ matrix.os }}-${{ matrix.framework }}" - name: Upload dotnet test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: dotnet-results-windows-latest-${{ matrix.framework }} path: TestResults-windows-latest-${{ matrix.framework }} diff --git a/src/CSRakowski.Parallel/CSRakowski.Parallel.csproj b/src/CSRakowski.Parallel/CSRakowski.Parallel.csproj index 7ac3cac..2e35a7e 100644 --- a/src/CSRakowski.Parallel/CSRakowski.Parallel.csproj +++ b/src/CSRakowski.Parallel/CSRakowski.Parallel.csproj @@ -1,7 +1,7 @@  - net472;net80;net60;netstandard2.1;netstandard2.0;netstandard1.1 + net80;net472;netstandard2.0 true CSRakowski.ParallelAsync @@ -26,11 +26,7 @@ - - - - - + diff --git a/src/CSRakowski.Parallel/Extensions/ParallelAsyncEx.AsyncStreams.cs b/src/CSRakowski.Parallel/Extensions/ParallelAsyncEx.AsyncStreams.cs index 27c1964..5ac2730 100644 --- a/src/CSRakowski.Parallel/Extensions/ParallelAsyncEx.AsyncStreams.cs +++ b/src/CSRakowski.Parallel/Extensions/ParallelAsyncEx.AsyncStreams.cs @@ -8,8 +8,6 @@ namespace CSRakowski.Parallel.Extensions { - #if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - /// /// Extension methods to allow using the functionalities of with a fluent syntax /// @@ -28,7 +26,7 @@ public static partial class ParallelAsyncEx /// The results of the operations /// Thrown when either or is null. /// Thrown when the configured maximum batch size is a negative number. - public static IAsyncEnumerable ForEachAsyncStream(this IParallelAsyncEnumerable parallelAsync, Func> func, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static IAsyncEnumerable ForEachAsyncStream(this IParallelAsyncEnumerable parallelAsync, Func> func, CancellationToken cancellationToken = default) { var obj = EnsureValidEnumerable(parallelAsync); @@ -53,7 +51,7 @@ public static IAsyncEnumerable ForEachAsyncStream(this /// The results of the operations /// Thrown when either or is null. /// Thrown when the configured maximum batch size is a negative number. - public static IAsyncEnumerable ForEachAsyncStream(this IParallelAsyncEnumerable parallelAsync, Func> func, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static IAsyncEnumerable ForEachAsyncStream(this IParallelAsyncEnumerable parallelAsync, Func> func, CancellationToken cancellationToken = default) { var obj = EnsureValidEnumerable(parallelAsync); @@ -69,7 +67,4 @@ public static IAsyncEnumerable ForEachAsyncStream(this #endregion ForEachAsyncStream overloads } - - #endif //NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - } diff --git a/src/CSRakowski.Parallel/ParallelAsync.AsyncStreams.cs b/src/CSRakowski.Parallel/ParallelAsync.AsyncStreams.cs index 0f8e0b7..0fe45e0 100644 --- a/src/CSRakowski.Parallel/ParallelAsync.AsyncStreams.cs +++ b/src/CSRakowski.Parallel/ParallelAsync.AsyncStreams.cs @@ -7,8 +7,6 @@ namespace CSRakowski.Parallel { -#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - public static partial class ParallelAsync { #region IEnumerable @@ -41,12 +39,16 @@ public static partial class ParallelAsync /// Setting this value to low, will mean a too small list will be allocated and you will have to pay a small performance hit for the resizing of the list during execution. /// /// - public static IAsyncEnumerable ForEachAsyncStream(IEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static IAsyncEnumerable ForEachAsyncStream(IEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, CancellationToken cancellationToken = default) { +#if NET8_0_OR_GREATER + ArgumentNullException.ThrowIfNull(func); +#else if (func == null) { throw new ArgumentNullException(nameof(func)); } +#endif //NET8_0_OR_GREATER var funcWithCancellationToken = WrapFunc(func); return ForEachAsyncStream(collection, funcWithCancellationToken, maxBatchSize, allowOutOfOrderProcessing, estimatedResultSize, cancellationToken); @@ -80,8 +82,12 @@ public static IAsyncEnumerable ForEachAsyncStream(IEnumer /// Setting this value to low, will mean a too small list will be allocated and you will have to pay a small performance hit for the resizing of the list during execution. /// /// - public static IAsyncEnumerable ForEachAsyncStream(IEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static IAsyncEnumerable ForEachAsyncStream(IEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, CancellationToken cancellationToken = default) { +#if NET8_0_OR_GREATER + ArgumentNullException.ThrowIfNull(collection); + ArgumentNullException.ThrowIfNull(func); +#else if (collection == null) { throw new ArgumentNullException(nameof(collection)); @@ -91,6 +97,7 @@ public static IAsyncEnumerable ForEachAsyncStream(IEnumer { throw new ArgumentNullException(nameof(func)); } +#endif //NET8_0_OR_GREATER var maxBatchSizeToUse = DetermineBatchSizeToUse(maxBatchSize); @@ -319,12 +326,16 @@ private static async IAsyncEnumerable ForEachAsyncStreamImplUnordered /// - public static IAsyncEnumerable ForEachAsyncStream(IAsyncEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static IAsyncEnumerable ForEachAsyncStream(IAsyncEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, CancellationToken cancellationToken = default) { +#if NET8_0_OR_GREATER + ArgumentNullException.ThrowIfNull(func); +#else if (func == null) { throw new ArgumentNullException(nameof(func)); } +#endif //NET8_0_OR_GREATER var funcWithCancellationToken = WrapFunc(func); return ForEachAsyncStream(collection, funcWithCancellationToken, maxBatchSize, allowOutOfOrderProcessing, estimatedResultSize, cancellationToken); @@ -358,8 +369,12 @@ public static IAsyncEnumerable ForEachAsyncStream(IAsyncE /// Setting this value to low, will mean a too small list will be allocated and you will have to pay a small performance hit for the resizing of the list during execution. /// /// - public static IAsyncEnumerable ForEachAsyncStream(IAsyncEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static IAsyncEnumerable ForEachAsyncStream(IAsyncEnumerable collection, Func> func, int maxBatchSize = 0, bool allowOutOfOrderProcessing = false, int estimatedResultSize = 0, CancellationToken cancellationToken = default) { +#if NET8_0_OR_GREATER + ArgumentNullException.ThrowIfNull(collection); + ArgumentNullException.ThrowIfNull(func); +#else if (collection == null) { throw new ArgumentNullException(nameof(collection)); @@ -369,6 +384,7 @@ public static IAsyncEnumerable ForEachAsyncStream(IAsyncE { throw new ArgumentNullException(nameof(func)); } +#endif //NET8_0_OR_GREATER int maxBatchSizeToUse = DetermineBatchSizeToUse(maxBatchSize); @@ -555,8 +571,7 @@ private static async IAsyncEnumerable ForEachAsyncStreamImplUnorderedAs ParallelAsyncEventSource.Log.RunStop(runId); } - #endregion IAsyncEnumerable +#endregion IAsyncEnumerable } -#endif //NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER } diff --git a/tests/CSRakowski.Parallel.Benchmarks/Benchmarks/ParallelAsyncBenchmarks_AsyncStreams.cs b/tests/CSRakowski.Parallel.Benchmarks/Benchmarks/ParallelAsyncBenchmarks_AsyncStreams.cs index 1563110..4b1d10d 100644 --- a/tests/CSRakowski.Parallel.Benchmarks/Benchmarks/ParallelAsyncBenchmarks_AsyncStreams.cs +++ b/tests/CSRakowski.Parallel.Benchmarks/Benchmarks/ParallelAsyncBenchmarks_AsyncStreams.cs @@ -65,19 +65,11 @@ public async Task IEnumerable_ForEachAsyncStream() { int count = 0; -#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - await foreach (var r in ParallelAsync.ForEachAsyncStream(InputNumbers, TestFunctions.JustAddOne_WithCancellationToken, MaxBatchSize, AllowOutOfOrder, NumberOfItemsInCollection, CancellationToken.None)) { count++; } -#else - - await Task.CompletedTask; - -#endif //NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - return count; } @@ -86,18 +78,10 @@ public async Task IAsyncEnumerable_ForEachAsyncStream() { int count = 0; -#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - await foreach (var r in ParallelAsync.ForEachAsyncStream(InputNumbersAsync, TestFunctions.JustAddOne_WithCancellationToken, MaxBatchSize, AllowOutOfOrder, NumberOfItemsInCollection, CancellationToken.None)) { count++; } - -#else - - await Task.CompletedTask; - -#endif //NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER return count; } diff --git a/tests/CSRakowski.Parallel.Benchmarks/CSRakowski.Parallel.Benchmarks.csproj b/tests/CSRakowski.Parallel.Benchmarks/CSRakowski.Parallel.Benchmarks.csproj index 7fae4b4..341281d 100644 --- a/tests/CSRakowski.Parallel.Benchmarks/CSRakowski.Parallel.Benchmarks.csproj +++ b/tests/CSRakowski.Parallel.Benchmarks/CSRakowski.Parallel.Benchmarks.csproj @@ -10,12 +10,12 @@ - + - + diff --git a/tests/CSRakowski.Parallel.Tests/CSRakowski.Parallel.Tests.csproj b/tests/CSRakowski.Parallel.Tests/CSRakowski.Parallel.Tests.csproj index 2404353..3d48967 100644 --- a/tests/CSRakowski.Parallel.Tests/CSRakowski.Parallel.Tests.csproj +++ b/tests/CSRakowski.Parallel.Tests/CSRakowski.Parallel.Tests.csproj @@ -1,4 +1,4 @@ - + net48;net472;net90;net80;net60 @@ -11,9 +11,8 @@ - - + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -24,6 +23,13 @@ + + + + + + + diff --git a/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests.cs b/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests.cs index 57f0ca2..b7b3ad4 100644 --- a/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests.cs +++ b/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests.cs @@ -83,7 +83,7 @@ await parallelAsync.ForEachAsync((el) => { Interlocked.Add(ref sum, el); Interlocked.Increment(ref count); - return TaskHelper.CompletedTask; + return Task.CompletedTask; }); Assert.Equal(55, sum); @@ -106,7 +106,7 @@ await parallelAsync.ForEachAsync((el, ct) => { Interlocked.Add(ref sum, el); Interlocked.Increment(ref count); - return TaskHelper.CompletedTask; + return Task.CompletedTask; }); Assert.Equal(55, sum); diff --git a/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_AsyncStreams.cs b/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_AsyncStreams.cs index c71308a..fb37d74 100644 --- a/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_AsyncStreams.cs +++ b/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_AsyncStreams.cs @@ -14,8 +14,6 @@ namespace CSRakowski.Parallel.Tests { - #if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - [Collection("ParallelAsync AsyncStreams Extension Methods Tests")] public class ExtensionMethodsTests_AsyncStreams { @@ -128,7 +126,4 @@ public async Task ParallelAsync_Can_Chain_Together_AsyncStreams() } } } - - #endif //NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - } diff --git a/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_IAsyncEnumerable.cs b/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_IAsyncEnumerable.cs index c2889c9..feeb841 100644 --- a/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_IAsyncEnumerable.cs +++ b/tests/CSRakowski.Parallel.Tests/ExtensionMethodsTests_IAsyncEnumerable.cs @@ -85,7 +85,7 @@ await parallelAsync.ForEachAsync((el) => { Interlocked.Add(ref sum, el); Interlocked.Increment(ref count); - return TaskHelper.CompletedTask; + return Task.CompletedTask; }); Assert.Equal(55, sum); @@ -108,7 +108,7 @@ await parallelAsync.ForEachAsync((el, ct) => { Interlocked.Add(ref sum, el); Interlocked.Increment(ref count); - return TaskHelper.CompletedTask; + return Task.CompletedTask; }); Assert.Equal(55, sum); diff --git a/tests/CSRakowski.Parallel.Tests/Mocks and Helpers/TaskHelper.cs b/tests/CSRakowski.Parallel.Tests/Mocks and Helpers/TaskHelper.cs deleted file mode 100644 index 7d66a55..0000000 --- a/tests/CSRakowski.Parallel.Tests/Mocks and Helpers/TaskHelper.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CSRakowski.Parallel.Tests.Helpers -{ - /// - /// As Task.CompletedTask is not available on 4.5, I slightly modified the code found here: http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs,66f1c3e3e272f591 - /// - internal static class TaskHelper - { - /// - /// A task that's already been completed successfully. - /// - private static Task s_completedTask; - - /// Gets a task that's already been completed successfully. - /// May not always return the same instance. - public static Task CompletedTask - { - get - { - var completedTask = s_completedTask; - if (completedTask == null) - { -#if NET452 - s_completedTask = completedTask = Task.FromResult(true); -#else - s_completedTask = completedTask = Task.CompletedTask; -#endif - } - return completedTask; - } - } - } -} diff --git a/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests.cs b/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests.cs index 6bb99a8..beb7eb2 100644 --- a/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests.cs +++ b/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests.cs @@ -42,7 +42,7 @@ public async Task ParallelAsync_Can_Batch_Basic_Work_Void() await ParallelAsync.ForEachAsync(input, (el) => { - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 1); Assert.True(true); @@ -105,7 +105,7 @@ public async Task ParallelAsync_Can_Handle_Misaligned_Sizing_Void() await ParallelAsync.ForEachAsync(input, (el) => { - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 4, cancellationToken: cancellationToken); Assert.True(true); @@ -120,7 +120,7 @@ public async Task ParallelAsync_Can_Handle_Misaligned_Sizing_Void_Without_Estima await ParallelAsync.ForEachAsync(input, (el) => { - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 4, cancellationToken: cancellationToken); Assert.True(true); @@ -221,8 +221,8 @@ public async Task ParallelAsync_Throws_On_Invalid_Inputs() var empty = new int[0]; IEnumerable nullEnumerable = null; - var ex1 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e) => TaskHelper.CompletedTask)); - var ex2 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e, ct) => TaskHelper.CompletedTask)); + var ex1 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e) => Task.CompletedTask)); + var ex2 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e, ct) => Task.CompletedTask)); var ex3 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e) => Task.FromResult(e))); var ex4 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e, ct) => Task.FromResult(e))); @@ -233,7 +233,7 @@ public async Task ParallelAsync_Throws_On_Invalid_Inputs() var ex7 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (Func>)null)); var ex8 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (Func>)null)); - var ex9 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (e) => TaskHelper.CompletedTask, -1)); + var ex9 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (e) => Task.CompletedTask, -1)); Assert.Equal("collection", ex1.ParamName); Assert.Equal("collection", ex2.ParamName); @@ -277,7 +277,7 @@ await ParallelAsync.ForEachAsync(input, (el) => { var r = el + Interlocked.Increment(ref callCount); - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 9, allowOutOfOrderProcessing: true); Assert.Equal(numberOfElements, callCount); diff --git a/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_AsyncStreams.cs b/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_AsyncStreams.cs index 828a000..28876bd 100644 --- a/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_AsyncStreams.cs +++ b/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_AsyncStreams.cs @@ -13,8 +13,6 @@ namespace CSRakowski.Parallel.Tests { - #if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - [Collection("ParallelAsync AsyncStreams Tests")] public class ParallelAsyncTests_AsyncStreams { @@ -266,7 +264,4 @@ public async Task ParallelAsync_Can_Chain_Together_AsyncStreams() } } } - - #endif //NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER - } diff --git a/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_IAsyncEnumerable.cs b/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_IAsyncEnumerable.cs index a0f8c12..c843e94 100644 --- a/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_IAsyncEnumerable.cs +++ b/tests/CSRakowski.Parallel.Tests/ParallelAsyncTests_IAsyncEnumerable.cs @@ -44,7 +44,7 @@ public async Task ParallelAsync_Can_Batch_Basic_Work_Void() await ParallelAsync.ForEachAsync(input, (el) => { - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 1); Assert.True(true); @@ -107,7 +107,7 @@ public async Task ParallelAsync_Can_Handle_Misaligned_Sizing_Void() await ParallelAsync.ForEachAsync(input, (el) => { - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 4, cancellationToken: cancellationToken); Assert.True(true); @@ -122,7 +122,7 @@ public async Task ParallelAsync_Can_Handle_Misaligned_Sizing_Void_Without_Estima await ParallelAsync.ForEachAsync(input, (el) => { - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 4, cancellationToken: cancellationToken); Assert.True(true); @@ -223,8 +223,8 @@ public async Task ParallelAsync_Throws_On_Invalid_Inputs() var empty = new int[0].AsAsyncEnumerable(); IAsyncEnumerable nullEnumerable = null; - var ex1 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e) => TaskHelper.CompletedTask)); - var ex2 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e, ct) => TaskHelper.CompletedTask)); + var ex1 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e) => Task.CompletedTask)); + var ex2 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e, ct) => Task.CompletedTask)); var ex3 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e) => Task.FromResult(e))); var ex4 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(nullEnumerable, (e, ct) => Task.FromResult(e))); @@ -235,7 +235,7 @@ public async Task ParallelAsync_Throws_On_Invalid_Inputs() var ex7 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (Func>)null)); var ex8 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (Func>)null)); - var ex9 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (e) => TaskHelper.CompletedTask, -1)); + var ex9 = await Assert.ThrowsAsync(() => ParallelAsync.ForEachAsync(empty, (e) => Task.CompletedTask, -1)); Assert.Equal("collection", ex1.ParamName); Assert.Equal("collection", ex2.ParamName); @@ -279,7 +279,7 @@ await ParallelAsync.ForEachAsync(input, (el) => { var r = el + Interlocked.Increment(ref callCount); - return TaskHelper.CompletedTask; + return Task.CompletedTask; }, maxBatchSize: 9, allowOutOfOrderProcessing: true); Assert.Equal(numberOfElements, callCount); diff --git a/tests/Profiling/App.config b/tests/Profiling/App.config index 680d7f0..741b8de 100644 --- a/tests/Profiling/App.config +++ b/tests/Profiling/App.config @@ -7,7 +7,11 @@ - + + + + + diff --git a/tests/Profiling/Profiling.csproj b/tests/Profiling/Profiling.csproj index 46727f5..f77ecda 100644 --- a/tests/Profiling/Profiling.csproj +++ b/tests/Profiling/Profiling.csproj @@ -35,20 +35,8 @@ false - - ..\..\packages\CSRakowski.AsyncStreamsPreparations.1.5.1\lib\netstandard2.0\CSRakowski.AsyncStreamsPreparations.dll - - - ..\..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - - ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - @@ -62,9 +50,6 @@ - - Designer - @@ -72,5 +57,19 @@ CSRakowski.Parallel + + + 1.6.0 + + + 7.0.0 + + + 6.1.2 + + + 4.6.3 + + - \ No newline at end of file + diff --git a/tests/Profiling/Program.cs b/tests/Profiling/Program.cs index c520b06..a7d4038 100644 --- a/tests/Profiling/Program.cs +++ b/tests/Profiling/Program.cs @@ -32,7 +32,10 @@ public static async Task Main(string[] args) return 1; /*/ var resultCount = results.Count(); - return resultCount; + + return (resultCount == numberOfElements) + ? 0 + : numberOfElements - resultCount; //*/ } diff --git a/tests/Profiling/packages.config b/tests/Profiling/packages.config deleted file mode 100644 index 7b6b9a8..0000000 --- a/tests/Profiling/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file