/// <summary> /// Sends a <see cref="ServiceBusMessageBatch"/> /// containing a set of <see cref="ServiceBusMessage"/> to /// the associated Service Bus entity. /// </summary> /// /// <param name="messageBatch">The batch of messages to send. A batch may be created using <see cref="CreateBatchAsync(CancellationToken)" />.</param> /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param> /// <returns>A task to be resolved on when the operation has completed.</returns> /// public virtual async Task SendAsync( ServiceBusMessageBatch messageBatch, CancellationToken cancellationToken = default) { Argument.AssertNotNull(messageBatch, nameof(messageBatch)); Argument.AssertNotClosed(IsDisposed, nameof(ServiceBusSender)); cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>(); ServiceBusEventSource.Log.SendMessageStart(Identifier, messageBatch.Count); try { messageBatch.Lock(); await _innerSender.SendBatchAsync(messageBatch, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { ServiceBusEventSource.Log.SendMessageException(Identifier, ex); throw; } finally { messageBatch.Unlock(); } cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>(); ServiceBusEventSource.Log.SendMessageComplete(Identifier); }
/// <summary> /// Sends a <see cref="ServiceBusMessageBatch"/> /// containing a set of <see cref="ServiceBusMessage"/> to /// the associated Service Bus entity. /// </summary> /// /// <param name="messageBatch">The batch of messages to send. A batch may be created using <see cref="CreateBatchAsync(CancellationToken)" />.</param> /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param> /// <returns>A task to be resolved on when the operation has completed.</returns> /// public virtual async Task SendAsync( ServiceBusMessageBatch messageBatch, CancellationToken cancellationToken = default) { Argument.AssertNotNull(messageBatch, nameof(messageBatch)); Argument.AssertNotClosed(IsDisposed, nameof(ServiceBusSender)); cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>(); Logger.SendMessageStart(Identifier, messageBatch.Count); using DiagnosticScope scope = CreateDiagnosticScope( messageBatch.AsEnumerable <ServiceBusMessage>(), DiagnosticProperty.SendActivityName); scope.Start(); try { messageBatch.Lock(); await _innerSender.SendBatchAsync(messageBatch, cancellationToken).ConfigureAwait(false); } catch (Exception exception) { Logger.SendMessageException(Identifier, exception.ToString()); scope.Failed(exception); throw; } finally { messageBatch.Unlock(); } cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>(); Logger.SendMessageComplete(Identifier); }
/// <summary> /// Sends a set of messages to the associated Service Bus entity using a batched approach. If the size of messages exceed the /// maximum size of a single batch, an exception will be triggered and the send will fail. /// </summary> /// /// <param name="messageBatch">The set of messages to send. A batch may be created using <see cref="CreateBatchAsync(CancellationToken)" />.</param> /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param> /// /// <returns>A task to be resolved on when the operation has completed.</returns> /// public virtual async Task SendBatchAsync( ServiceBusMessageBatch messageBatch, CancellationToken cancellationToken = default) { Argument.AssertNotNull(messageBatch, nameof(messageBatch)); await _innerSender.SendBatchAsync(messageBatch, cancellationToken).ConfigureAwait(false); }