perf: avoid closure allocation in BeforeHookTaskCache.GetOrCreateBeforeAssemblyTask (original) (raw)
TUnit.Engine/Services/BeforeHookTaskCache.cs:36-40:
public ValueTask GetOrCreateBeforeAssemblyTask(Assembly assembly, Func<Assembly, CancellationToken, ValueTask> taskFactory, CancellationToken cancellationToken) { var task = _beforeAssemblyTasks.GetOrAdd(assembly, a => taskFactory(a, cancellationToken).AsTask()); return new ValueTask(task); }
The a => lambda captures taskFactory + cancellationToken, allocating a closure on every call, including cache hits where the factory never runs.
The sibling GetOrCreateBeforeClassTask at line 44+ already implements the fix pattern: TryGetValue fast path first, then GetOrAdd only on miss. Mirror that here.
Why hot: Once per assembly per test session, but the closure alloc happens per GetOrCreate call, not per cache miss.
TFM: No gating.