diff --git a/TUnit.Engine/Services/AfterHookPairTracker.cs b/TUnit.Engine/Services/AfterHookPairTracker.cs index 2adc97a56b..9f25689412 100644 --- a/TUnit.Engine/Services/AfterHookPairTracker.cs +++ b/TUnit.Engine/Services/AfterHookPairTracker.cs @@ -155,6 +155,12 @@ public ValueTask> GetOrCreateAfterTestSessionTask(Func public ValueTask> GetOrCreateAfterAssemblyTask(Assembly assembly, Func>> taskFactory) { + // Lock-free fast path avoids allocating a closure on the common cache-hit case. + if (_afterAssemblyTasks.TryGetValue(assembly, out var existingTask)) + { + return new ValueTask>(existingTask); + } + var task = _afterAssemblyTasks.GetOrAdd(assembly, a => taskFactory(a).AsTask()); return new ValueTask>(task); }