diff --git a/TUnit.Engine/Scheduling/TestRunner.cs b/TUnit.Engine/Scheduling/TestRunner.cs index ad7376d500..1ee459b7e1 100644 --- a/TUnit.Engine/Scheduling/TestRunner.cs +++ b/TUnit.Engine/Scheduling/TestRunner.cs @@ -1,6 +1,5 @@ -using Microsoft.Testing.Platform.Extensions.Messages; +using System.Collections.Concurrent; using TUnit.Core; -using TUnit.Core.Data; using TUnit.Engine.Interfaces; using TUnit.Engine.Logging; using TUnit.Engine.Services.TestExecution; @@ -36,13 +35,17 @@ internal TestRunner( _testStateManager = testStateManager; } - private readonly ThreadSafeDictionary> _executingTests = new(); + private readonly ConcurrentDictionary> _executingTests = new(); private Exception? _firstFailFastException; public ValueTask ExecuteTestAsync(AbstractExecutableTest test, CancellationToken cancellationToken) { + if (_executingTests.TryGetValue(test.TestId, out var existingTcs)) + { + return new ValueTask(existingTcs.Task); + } var tcs = new TaskCompletionSource(); - var existingTcs = _executingTests.GetOrAdd(test.TestId, _ => tcs); + existingTcs = _executingTests.GetOrAdd(test.TestId, tcs); if (existingTcs != tcs) {