public Task <byte[]> GetBytesAsync(long maxDownloadSizeBytes, IProgress <IDownloadState>?progress = null, CancellationToken cancellationToken = default)
        {
            var tcs = new TaskCompletionSource <byte[]>();

            var downloadTask = _storageReference.GetStream(new StreamProcessor(tcs, maxDownloadSizeBytes));

            downloadTask.AddOnCompleteListener(new OnCompleteHandlerListener(task =>
            {
                if (!tcs.Task.IsCompleted)
                {
                    var exception = StorageException.FromErrorStatus(new Statuses(CommonStatusCodes.InternalError));
                    tcs.TrySetException(ExceptionMapper.Map(exception));
                }
            }));

            if (progress != null)
            {
                downloadTask.AddOnProgressListener(new OnProgressHandlerListener(snapshot =>
                {
                    var downloadTaskSnapshot = snapshot.JavaCast <StreamDownloadTask.TaskSnapshot>();
                    progress.Report(new StreamDownloadTaskSnapshotWrapper(downloadTaskSnapshot !));
                }));
            }

            if (cancellationToken != default)
            {
                cancellationToken.Register(() => downloadTask.Cancel());
            }

            return(tcs.Task);
        }