diff options
Diffstat (limited to 'lib/Utils/tests/Async')
-rw-r--r-- | lib/Utils/tests/Async/AsyncAccessSerializerTests.cs | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs b/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs index 3c9bde7..82f9c3a 100644 --- a/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs +++ b/lib/Utils/tests/Async/AsyncAccessSerializerTests.cs @@ -147,13 +147,15 @@ namespace VNLib.Utils.Async.Tests int maxCount = 128; string serialized = ""; - using CancellationTokenSource cts = new(500); + using CancellationTokenSource cts = new(10000); Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () => { //Take a lock then random delay, then release await serializer.WaitAsync(DEFAULT_KEY, cts.Token); + await Task.Delay(1); + //Increment count serialized += "0"; @@ -171,9 +173,7 @@ namespace VNLib.Utils.Async.Tests public void SimplePerformanceComparisonTest() { const string DEFAULT_KEY = "default"; - - //Alloc serailzer base on string - IAsyncAccessSerializer<string> serializer = new AsyncAccessSerializer<string>(100, 100, StringComparer.Ordinal); + const int maxCount = 128; const int itterations = 20; @@ -182,55 +182,60 @@ namespace VNLib.Utils.Async.Tests using CancellationTokenSource cts = new(500); + using SemaphoreSlim slim = new(1,1); + for (int i = 0; i < itterations; i++) { test = ""; - timer.Restart(); + timer.Restart(); Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () => { //Take a lock then random delay, then release - await serializer.WaitAsync(DEFAULT_KEY, cts.Token); + await slim.WaitAsync(cts.Token); //Increment count test += "0"; - serializer.Release(DEFAULT_KEY); - + slim.Release(); })).ToArray(); Task.WaitAll(asyncArr); timer.Stop(); - Trace.WriteLine($"Async serialzier test completed in {timer.ElapsedTicks / 10} microseconds"); + Trace.WriteLine($"SemaphoreSlim test completed in {timer.ElapsedTicks / 10} microseconds"); + Assert.AreEqual(maxCount, test.Length); - } - using SemaphoreSlim slim = new(1,1); + } + + //Alloc serailzer base on string + IAsyncAccessSerializer<string> serializer = new AsyncAccessSerializer<string>(100, 100, StringComparer.Ordinal); for (int i = 0; i < itterations; i++) { + test = ""; timer.Restart(); Task[] asyncArr = new int[maxCount].Select(p => Task.Run(async () => { //Take a lock then random delay, then release - await slim.WaitAsync(cts.Token); + await serializer.WaitAsync(DEFAULT_KEY, cts.Token); //Increment count test += "0"; - slim.Release(); + serializer.Release(DEFAULT_KEY); + })).ToArray(); Task.WaitAll(asyncArr); timer.Stop(); - Trace.WriteLine($"SemaphoreSlim test completed in {timer.ElapsedTicks / 10} microseconds"); - + Trace.WriteLine($"Async serialzier test completed in {timer.ElapsedTicks / 10} microseconds"); Assert.AreEqual(maxCount, test.Length); } } |