public IAsyncEnumerator <TCollection> GetAsyncEnumerator()
        {
            var en = new BufferBoundaryExactEnumerator(_source.GetAsyncEnumerator(), _boundary.GetAsyncEnumerator(), _collectionSupplier, _maxSize);

            en.MoveNextOther();
            en.MoveNextSource();
            return(en);
        }
        public IAsyncEnumerator <TCollection> GetAsyncEnumerator(CancellationToken cancellationToken)
        {
            var mainCancel  = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
            var otherCancel = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
            var en          = new BufferBoundaryExactEnumerator(_source.GetAsyncEnumerator(mainCancel.Token),
                                                                _boundary.GetAsyncEnumerator(otherCancel.Token), _collectionSupplier, _maxSize, mainCancel, otherCancel);

            en.MoveNextOther();
            en.MoveNextSource();
            return(en);
        }