From 587173486a3517af23014ffbf35c173195edac01 Mon Sep 17 00:00:00 2001 From: Blank Date: Wed, 29 Jul 2026 21:06:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(extensions):=20=E4=BF=AE=E5=A4=8D=20Concurr?= =?UTF-8?q?entLimitedQueue.Limit=20setter=20=E4=B8=8D=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=BC=95=E7=94=A8=20=5Flimit=20=E5=AD=97=E6=AE=B5=E7=9A=84=20S?= =?UTF-8?q?onar=20S4275=20=E8=BF=9D=E8=A7=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Linear: GFX-197 将 ConcurrentLimitedQueue.Limit 的 setter 由原来的「校验 + 委托 SetLimit(value)」改为在自身代码块内直接对字段 _limit 赋值,并在锁内复用溢出项丢弃与 ItemDiscarded 通知路径。公共 API 签名、参数校验语义、溢出丢弃行为及既有测试断言均保持不变。 --- .../ConcurrentLimitedQueue.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/GameFrameX.Foundation.Extensions/ConcurrentLimitedQueue.cs b/GameFrameX.Foundation.Extensions/ConcurrentLimitedQueue.cs index 51714cd..b3582fd 100644 --- a/GameFrameX.Foundation.Extensions/ConcurrentLimitedQueue.cs +++ b/GameFrameX.Foundation.Extensions/ConcurrentLimitedQueue.cs @@ -158,7 +158,20 @@ public int Limit set { ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(value, 0, nameof(value)); - SetLimit(value); + var discardedItems = new List(); + lock (_syncRoot) + { + _limit = value; + while (_queue.Count > _limit && _queue.TryDequeue(out var discardedItem)) + { + discardedItems.Add(discardedItem); + } + } + + foreach (var discardedItem in discardedItems) + { + NotifyDiscarded(new QueueDiscardedItem(discardedItem, LimitedQueueDiscardReason.LimitReduced)); + } } }