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