private void RemoveLeft(ActiveListJoinerData <TLeft, TRight, TResult, TKey> data)
        {
            try
            {
                data.Clear();
            }
            finally
            {
                JoinerRemoved.Invoke(data);
                data.Dispose();

                if (_leftJoiners.Count == 0)
                {
                    _rightJoiner?.Set(_right);
                }

                if (_leftJoiners.Count == 0 && !HasRight)
                {
                    SetEmptied?.Invoke(this);
                }
            }
        }
        public void ClearRight()
        {
            HasRight = false;

            var data = _rightJoiner;

            _rightJoiner = null;

            try
            {
                data.Clear();
            }
            finally
            {
                JoinerRemoved.Invoke(data);
                data.Dispose();

                if (_leftJoiners.Count == 0 && !HasRight)
                {
                    SetEmptied?.Invoke(this);
                }
            }
        }