private protected bool RemoveNode(WaitNode node)
        {
            var inList = ReferenceEquals(head, node) || !node.IsRoot;

            if (ReferenceEquals(head, node))
            {
                head = node.Next;
            }
            if (ReferenceEquals(tail, node))
            {
                tail = node.Previous;
            }
            node.DetachNode();
            return(inList);
        }