diff --git a/TUnit.Core/Executors/DedicatedThreadExecutor.cs b/TUnit.Core/Executors/DedicatedThreadExecutor.cs index e3ab6ae470..ac9c3606e2 100644 --- a/TUnit.Core/Executors/DedicatedThreadExecutor.cs +++ b/TUnit.Core/Executors/DedicatedThreadExecutor.cs @@ -18,17 +18,18 @@ protected sealed override async ValueTask ExecuteAsync(Func action) var tcs = new TaskCompletionSource(); - var thread = new Thread(() => + var thread = new Thread(static state => { + var (threadExecutor, action, tcs) = (ValueTuple, TaskCompletionSource>)state!; Exception? capturedException = null; try { - Initialize(); + threadExecutor.Initialize(); try { - ExecuteAsyncActionWithMessagePump(action, tcs); + threadExecutor.ExecuteAsyncActionWithMessagePump(action, tcs); } catch (Exception e) { @@ -41,7 +42,7 @@ protected sealed override async ValueTask ExecuteAsync(Func action) } finally { - CleanUp(); + threadExecutor.CleanUp(); if (capturedException != null && !tcs.Task.IsCompleted) { @@ -50,8 +51,10 @@ protected sealed override async ValueTask ExecuteAsync(Func action) } }); + var state = (this, action, tcs); + ConfigureThread(thread); - thread.Start(); + thread.Start(state); await tcs.Task; } @@ -409,7 +412,7 @@ public override SynchronizationContext CreateCopy() } } -public ValueTask OnTestRegistered(TestRegisteredContext context) + public ValueTask OnTestRegistered(TestRegisteredContext context) { context.SetParallelLimiter(new ProcessorCountParallelLimit()); return default(ValueTask);