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

AggregatingProgressIncrementer

An accumulator for request and response data transfers.
using System; using System.IO; using System.Threading; namespace Azure.Storage { internal sealed class AggregatingProgressIncrementer : IProgress<long> { private long _currentValue; private readonly IProgress<long> _innerHandler; public static AggregatingProgressIncrementer None { get; } = new AggregatingProgressIncrementer(null); public long Current => Volatile.Read(ref _currentValue); public Stream CreateProgressIncrementingStream(Stream stream) { if (_innerHandler == null || stream == null) return stream; return new ProgressIncrementingStream(stream, this); } public AggregatingProgressIncrementer(IProgress<long> innerHandler) { _innerHandler = innerHandler; } public void Report(long bytes) { Interlocked.Add(ref _currentValue, bytes); _innerHandler?.Report(Current); } public void Reset() { Volatile.Write(ref _currentValue, 0); Report(0); } } }