public override async Task <AsyncDisposableValue <Stream> > OpenReadAsync(CancellationToken cancellationToken = new CancellationToken())
        {
            if (!await BlockBlob.ExistsAsync(cancellationToken))
            {
                throw new ResourceNotFoundException("Metadata not found for this store");
            }

            cancellationToken.ThrowIfCancellationRequested();

            var stream = new ArrayPoolMemoryStream(InitialCapacity, ArrayPool ?? ArrayPool <byte> .Shared);

            await BlockBlob.DownloadToStreamAsync(stream, cancellationToken);

            cancellationToken.ThrowIfCancellationRequested();

            stream.Seek(0, SeekOrigin.Begin);

            return(new AsyncDisposableValue <Stream>(stream, async() => stream.Dispose()));
        }