/// <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); }