public void Remove(ref AInputDequeuer dequeuer)
    {
        Debug.Assert(Dequeuers.Contains(dequeuer));
        Debug.Assert(dequeuer.Enqueuers.Contains(this));

        if (!Dequeuers.Contains(dequeuer))
        {
            return;
        }

        UnregisterDequeuer(ref dequeuer);

        dequeuer.Enqueuers.Remove(this);
        Dequeuers.Remove(dequeuer);

        Debug.Assert(dequeuer.Enqueuers.Count >= 0);
    }
    public void Add(ref AInputDequeuer dequeuer)
    {
        Debug.Assert(!Dequeuers.Contains(dequeuer));
        Debug.Assert(!dequeuer.Enqueuers.Contains(this));

        if (Dequeuers.Contains(dequeuer))
        {
            return;
        }

        RegisterDequeuer(ref dequeuer);

        dequeuer.Enqueuers.Add(this);
        Dequeuers.Add(dequeuer);

        Debug.Assert(dequeuer.Enqueuers.Count <= 2);
    }