lib/Classes/Public/TMCSessionQueue.ps1

Add-Type -TypeDefinition @"
using System;
using System.Collections.Concurrent;
 
public class TMCSessionQueue<T>
{
    public readonly ConcurrentQueue<T> queue = new ConcurrentQueue<T>();
    public event EventHandler Enqueued;
 
    public TMCSessionQueue() {}
 
    protected virtual void OnEnqueued()
    {
        Enqueued?.Invoke(this, EventArgs.Empty);
    }
 
    public virtual void Enqueue(T item)
    {
        queue.Enqueue(item);
        OnEnqueued();
    }
 
    public int Count
    {
        get
        {
            return queue.Count;
        }
    }
 
    public virtual Boolean TryDequeue(out T result)
    {
        return queue.TryDequeue(out result);
    }
}
"@