var queue = new ConcurrentQueue<T>();
var set = new ConcurrentDictionary<T, byte>(); // 值無意義,利用 Key 去重
var maxSize = 200;
var cleanThreshold = 150;
// 生產者
void Enqueue(T item) {
if (set.TryAdd(item, 0)) {
queue.Enqueue(item);
// 觸發清理邏輯(可用單獨 Timer 任務)
}
}
// 清理任務
void Cleanup() {
while (queue.Count > cleanThreshold && queue.TryDequeue(out var old)) {
set.TryRemove(old, out _);
}
}ConcurrentDictionary 保證去重線程安全。System.Threading.Channels.Channel 內置容量限制、背壓、異步讀寫,更現代化。