首頁 >後端開發 >C++ >如何在 C# 中使用並發隊列維護有界歷史記錄?

如何在 C# 中使用並發隊列維護有界歷史記錄?

Patricia Arquette
Patricia Arquette原創
2025-01-13 09:01:43365瀏覽

How to Maintain a Bounded History Using a Concurrent Queue in C#?

使用 System.Collections.Concurrent 取得固定大小的歷史記錄

想像一下需要一個資料結構來追蹤最近的歷史記錄,例如瀏覽器 URL。 System.Collections.Concurrent.ConcurrentQueue 是一個不錯的選擇,但我們需要限制它的大小。

此範例示範了一個 FixedSizedQueue<T> 類,它包裝 ConcurrentQueue 來管理有界歷史記錄:

<code class="language-csharp">public class FixedSizedQueue<T>
{
    private readonly ConcurrentQueue<T> _queue = new ConcurrentQueue<T>();
    private readonly object _lock = new object();
    public int Limit { get; set; }

    public void Enqueue(T item)
    {
        _queue.Enqueue(item);

        lock (_lock)
        {
            T overflow;
            while (_queue.Count > Limit && _queue.TryDequeue(out overflow)) { }
        }
    }

    // Add other methods like Dequeue, Count, etc., as needed.
}</code>

Limit 屬性定義最大隊列大小。 Enqueue 新增一個項目;如果超出限制,它會使用鎖來安全地刪除舊項目,直到大小在限制內。這僅保留最近的條目。 您可以根據應用程式的需要擴展此類以包含其他方法,例如 DequeueCount 等。

以上是如何在 C# 中使用並發隊列維護有界歷史記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn