internal async Task EnsureDispatched(IOutboxDispatcher dispatcher) { if (!IsClosed) { throw new InvalidOperationException($"The outbox {IdempotencyId} is not closed yet, so it can't be dispatched"); } if (IsDispatched) { return; } var dispatchingTasks = new List <Task>(); foreach (var command in Commands) { dispatchingTasks.Add(dispatcher.Send(command)); } foreach (var evt in Events) { dispatchingTasks.Add(dispatcher.Publish(evt)); } await Task.WhenAll(dispatchingTasks); IsDispatched = true; }
public async Task EnsureDispatched(Outbox outbox, IOutboxDispatcher dispatcher) { if (outbox.IsDispatched) { return; } foreach (var command in outbox.Commands) { await dispatcher.Send(command); } foreach (var evt in outbox.Events) { await dispatcher.Publish(evt); } await _repository.Save(outbox, OutboxPersistingReason.Dispatching); outbox.IsDispatched = true; }