示例#1
0
        /// <summary>
        /// Realiza a leitura de forma assincrona.
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="offset"></param>
        /// <param name="count"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override async Task <int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
        {
            if (_chunkLength == null)
            {
                string rawLength = _stream.ReadLine();
                int    length    = Int32.Parse(rawLength, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
                if (length == 0)
                {
                    return(0);
                }
                _chunkLength = length;
            }
            int maxRead = Math.Min(count - offset, _chunkLength.Value - _consumed);
            int read    = await _stream.ReadAsync(buffer, offset, maxRead, cancellationToken);

            _consumed += read;
            if (_consumed >= _chunkLength)
            {
                _stream.ReadLine();
                _chunkLength = null;
                _consumed    = 0;
            }
            return(read);
        }