Heim >Backend-Entwicklung >C++ >Wie verwaltet man einen begrenzten Verlauf mithilfe einer gleichzeitigen Warteschlange in C#?

Wie verwaltet man einen begrenzten Verlauf mithilfe einer gleichzeitigen Warteschlange in C#?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-13 09:01:43369Durchsuche

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

Verwenden von System.Collections.Concurrent für einen Verlauf mit fester Größe

Stellen Sie sich vor, Sie benötigen eine Datenstruktur, um den aktuellen Verlauf zu verfolgen, z. B. Browser-URLs. System.Collections.Concurrent.ConcurrentQueue ist eine gute Wahl, aber wir müssen die Größe begrenzen.

Dieses Beispiel zeigt eine FixedSizedQueue<T>-Klasse, die ConcurrentQueue umschließt, um einen begrenzten Verlauf zu verwalten:

<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>

Die Eigenschaft Limit definiert die maximale Warteschlangengröße. Enqueue fügt ein Element hinzu; Wenn das Limit überschritten wird, werden ältere Elemente mithilfe einer Sperre sicher entfernt, bis die Größe wieder innerhalb des Limits liegt. Dadurch bleiben nur die aktuellsten Einträge erhalten. Sie würden diese Klasse um weitere Methoden wie Dequeue, Count usw. erweitern, je nach Bedarf Ihrer Anwendung.

Das obige ist der detaillierte Inhalt vonWie verwaltet man einen begrenzten Verlauf mithilfe einer gleichzeitigen Warteschlange in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn