From 679b0e0bd923490452e75c98bf466629b87ba175 Mon Sep 17 00:00:00 2001 From: Ziya Suzen Date: Mon, 16 Jun 2025 14:06:46 +0100 Subject: [PATCH] Fix inbox collection was modified exception --- src/NATS.Client.Core/Internal/InboxSub.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/NATS.Client.Core/Internal/InboxSub.cs b/src/NATS.Client.Core/Internal/InboxSub.cs index 1f3402469..f2f1b3cfb 100644 --- a/src/NATS.Client.Core/Internal/InboxSub.cs +++ b/src/NATS.Client.Core/Internal/InboxSub.cs @@ -128,13 +128,24 @@ public async ValueTask ReceivedAsync(string subject, string? replyTo, ReadOnlySe } #if NETSTANDARD2_0 - foreach (var weakReference in subTable) + WeakReference[] weakReferences; + int subscriptionCount; + lock (subTable) { - if (weakReference.TryGetTarget(out var sub)) + subscriptionCount = subTable.Count; + weakReferences = ArrayPool>.Shared.Rent(subscriptionCount); + subTable.CopyTo(weakReferences, 0); + } + + for (var i = 0; i < subscriptionCount; i++) + { + if (weakReferences[i].TryGetTarget(out var sub)) { await sub.ReceiveAsync(subject, replyTo, headersBuffer, payloadBuffer).ConfigureAwait(false); } } + + ArrayPool>.Shared.Return(weakReferences); #else foreach (var (sub, _) in subTable) {