public override async Task PublishAsync(IEnumerable <Message> messages, CancellationToken cancellationToken = default)
        {
            messages = await Task.WhenAll(messages // TODO: Use batches here
                                          .Select(message =>
            {
                if (message.Content.Length > _maxMessageSize)
                {
                    return(Task.Run(async() =>
                    {
                        var key = Guid.NewGuid().ToString();
                        using (var stream = await _blobContainer.OpenWriteAsync(key, cancellationToken))
                        {
                            await stream.WriteAsync(message.Content, 0, message.Content.Length);
                            var content = Encoding.UTF8.GetBytes(StorageKey + ":" + key);
                            return new Message(message.Id, content, message.Properties, message.SystemProperties, message.PartitionId);
                        }
                    }));
                }
                else
                {
                    return(Task.FromResult(message));
                }
            }));

            await base.PublishAsync(messages, cancellationToken);
        }
 public virtual Task <Stream> OpenWriteAsync(string path, CancellationToken cancellationToken = default)
 {
     return(_blobContainer.OpenWriteAsync(path, cancellationToken));
 }