示例#1
0
 /// <summary>
 ///   Creates a size-constraint batch to which <see cref="ServiceBusMessage" /> may be added using a try-based pattern.  If a message would
 ///   exceed the maximum allowable size of the batch, the batch will not allow adding the message and signal that scenario using its
 ///   return value.
 ///
 ///   Because messages that would violate the size constraint cannot be added, publishing a batch will not trigger an exception when
 ///   attempting to send the messages to the Queue/Topic.
 /// </summary>
 ///
 /// <param name="options">The set of options to consider when creating this batch.</param>
 /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param>
 ///
 /// <returns>An <see cref="ServiceBusMessageBatch" /> with the requested <paramref name="options"/>.</returns>
 ///
 /// <seealso cref="CreateBatchAsync(CreateBatchOptions, CancellationToken)" />
 ///
 public virtual async ValueTask<ServiceBusMessageBatch> CreateBatchAsync(
     CreateBatchOptions options,
     CancellationToken cancellationToken = default)
 {
     Argument.AssertNotClosed(IsDisposed, nameof(ServiceBusSender));
     options = options?.Clone() ?? new CreateBatchOptions();
     cancellationToken.ThrowIfCancellationRequested<TaskCanceledException>();
     ServiceBusEventSource.Log.CreateMessageBatchStart(Identifier);
     ServiceBusMessageBatch batch;
     try
     {
         TransportMessageBatch transportBatch = await _innerSender.CreateBatchAsync(options, cancellationToken).ConfigureAwait(false);
         batch = new ServiceBusMessageBatch(transportBatch);
     }
     catch (Exception ex)
     {
         ServiceBusEventSource.Log.CreateMessageBatchException(Identifier, ex);
         throw;
     }
     cancellationToken.ThrowIfCancellationRequested<TaskCanceledException>();
     ServiceBusEventSource.Log.CreateMessageBatchComplete(Identifier);
     return batch;
 }