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)); + } } }