コード例 #1
0
        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;
        }