<PackageReference Include="Azure.Storage.Blobs" Version="12.23.0" />

StreamWithPosition

Wrapper for HttpContentStream that provides the current position.
using Azure.Core.Pipeline; using System; using System.IO; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; namespace Azure.Storage.Internal.Avro { internal class StreamWithPosition : Stream { private readonly Stream _stream; private long _position; private bool _disposed; public override long Position { get { return _position; } set { throw new NotImplementedException(); } } public override bool CanRead => _stream.CanRead; public override bool CanSeek => _stream.CanSeek; public override bool CanWrite => _stream.CanWrite; public override long Length => _stream.Length; public StreamWithPosition(Stream stream, long position = 0) { _stream = stream; _position = position; } public override int ReadByte() { int num = _stream.ReadByte(); if (num != -1) _position++; return num; } public override int Read(byte[] buffer, int offset, int count) { return ReadInternal(buffer, offset, count, false, default(CancellationToken)).EnsureCompleted(); } [AsyncStateMachine(typeof(<ReadAsync>d__9))] public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { <ReadAsync>d__9 stateMachine = default(<ReadAsync>d__9); stateMachine.<>t__builder = AsyncTaskMethodBuilder<int>.Create(); stateMachine.<>4__this = this; stateMachine.buffer = buffer; stateMachine.offset = offset; stateMachine.count = count; stateMachine.cancellationToken = cancellationToken; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [AsyncStateMachine(typeof(<ReadInternal>d__10))] private Task<int> ReadInternal(byte[] buffer, int offset, int count, bool async, CancellationToken cancellationToken) { <ReadInternal>d__10 stateMachine = default(<ReadInternal>d__10); stateMachine.<>t__builder = AsyncTaskMethodBuilder<int>.Create(); stateMachine.<>4__this = this; stateMachine.buffer = buffer; stateMachine.offset = offset; stateMachine.count = count; stateMachine.async = async; stateMachine.cancellationToken = cancellationToken; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { return _stream.BeginRead(buffer, offset, count, callback, state); } public override int EndRead(IAsyncResult asyncResult) { int num = _stream.EndRead(asyncResult); _position += num; return num; } public override long Seek(long offset, SeekOrigin origin) { return _stream.Seek(offset, origin); } public override void SetLength(long value) { _stream.SetLength(value); } public override void Write(byte[] buffer, int offset, int count) { _stream.Write(buffer, offset, count); } public override void Flush() { _stream.Flush(); } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!_disposed && disposing) { _stream.Dispose(); _disposed = true; } } } }