diff --git a/src/DotNetCore.CAP/Internal/ICapPublisher.Default.cs b/src/DotNetCore.CAP/Internal/ICapPublisher.Default.cs index 5ab81266..fed85e85 100644 --- a/src/DotNetCore.CAP/Internal/ICapPublisher.Default.cs +++ b/src/DotNetCore.CAP/Internal/ICapPublisher.Default.cs @@ -46,6 +46,12 @@ public ICapTransaction? Transaction get => _asyncLocal.Value?.Transaction; set { + if (value == null) + { + // Clear the CapTransactionHolder held in the ExecutionContext to avoid long-term reference retention. + _asyncLocal.Value = null; + return; + } _asyncLocal.Value ??= new CapTransactionHolder(); _asyncLocal.Value.Transaction = value; } @@ -184,6 +190,11 @@ private async Task PublishInternalAsync(string name, T? value, IDictionary