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