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);
    }
}
"@