CqlSharp.Protocol.FrameReader.BufferRemainingData C# (CSharp) Method

BufferRemainingData() public method

public BufferRemainingData ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        public async Task BufferRemainingData()
        {
            //ignore if all data has been read
            if(_unreadFromStream <= 0)
                return;

            //new buffer size
            int newSize = _remainingInBuffer + _unreadFromStream;

            //allocate new buffer if necessary
            byte[] newBuffer = newSize > _buffer.Length ? MemoryPool.Instance.Take(newSize) : _buffer;

            //copy/move existing buffer data
            if(_remainingInBuffer > 0)
                Buffer.BlockCopy(_buffer, _position, newBuffer, 0, _remainingInBuffer);

            //set read position to start of buffer
            _position = 0;

            //replace existing buffer
            if(_buffer != newBuffer)
            {
                byte[] temp = _buffer;
                _buffer = newBuffer;

                //return previous buffer to pool
                MemoryPool.Instance.Return(temp);
            }

            //load all remaining frame data
            while(_unreadFromStream > 0)
            {
                var readTask = ReadAsync(newBuffer, _remainingInBuffer, newSize - _remainingInBuffer);
                _remainingInBuffer += await readTask.AutoConfigureAwait();
            }
        }