protected virtual async Task RunAsync() { await using (var handle = await DistributedLock.TryAcquireAsync(DistributedLockName, cancellationToken: StoppingToken)) { if (handle != null) { while (true) { var waitingEvents = await Outbox.GetWaitingEventsAsync(EventBusBoxesOptions.OutboxWaitingEventMaxCount, StoppingToken); if (waitingEvents.Count <= 0) { break; } Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); foreach (var waitingEvent in waitingEvents) { await DistributedEventBus .AsSupportsEventBoxes() .PublishFromOutboxAsync( waitingEvent, OutboxConfig ); await Outbox.DeleteAsync(waitingEvent.Id); Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); } } } else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); try { await Task.Delay(EventBusBoxesOptions.DistributedLockWaitDuration, StoppingToken); } catch (TaskCanceledException) { } } } }
protected virtual async Task RunAsync() { await using (var handle = await DistributedLock.TryAcquireAsync(DistributedLockName, cancellationToken: StoppingToken)) { if (handle != null) { while (true) { var waitingEvents = await Outbox.GetWaitingEventsAsync(EventBusBoxesOptions.OutboxWaitingEventMaxCount, StoppingToken); if (waitingEvents.Count <= 0) { break; } Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); if (EventBusBoxesOptions.BatchPublishOutboxEvents) { await PublishOutgoingMessagesInBatchAsync(waitingEvents); } else { await PublishOutgoingMessagesAsync(waitingEvents); } } } else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); try { await Task.Delay(EventBusBoxesOptions.DistributedLockWaitDuration, StoppingToken); } catch (TaskCanceledException) { } } } }