Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
perf: avoid closure allocation in BeforeHookTaskCache.GetOrCreateBefo…
…reAssemblyTask (#6040)

Add the same lock-free TryGetValue fast path that
GetOrCreateBeforeClassTask uses, so cache hits skip the GetOrAdd
factory delegate that captures taskFactory + cancellationToken.
  • Loading branch information
thomhurst committed May 28, 2026
commit a52d9e59dda7aed0cace179cc72580752adc11a8
6 changes: 6 additions & 0 deletions TUnit.Engine/Services/BeforeHookTaskCache.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ public ValueTask GetOrCreateBeforeTestSessionTask(Func<CancellationToken, ValueT

public ValueTask GetOrCreateBeforeAssemblyTask(Assembly assembly, Func<Assembly, CancellationToken, ValueTask> taskFactory, CancellationToken cancellationToken)
{
// Lock-free fast path avoids allocating a closure on the common cache-hit case.
if (_beforeAssemblyTasks.TryGetValue(assembly, out var existingTask))
{
return new ValueTask(existingTask);
}

var task = _beforeAssemblyTasks.GetOrAdd(assembly, a => taskFactory(a, cancellationToken).AsTask());
return new ValueTask(task);
}
Expand Down
Loading