// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using GFramework.Cqrs.Abstractions.Cqrs; using GFramework.Cqrs.Notification; namespace GFramework.Cqrs.Internal; /// /// 默认的通知发布器实现。 /// /// /// 该实现完整保留当前 CQRS runtime 的既有通知语义:按已解析顺序逐个执行处理器, /// 并在首个处理器抛出异常时立即停止后续发布。 /// internal sealed class SequentialNotificationPublisher : INotificationPublisher { /// /// 按既定顺序逐个执行当前通知的处理器。 /// /// 通知类型。 /// 当前发布调用的执行上下文。 /// 取消令牌。 /// 表示通知发布完成的值任务。 /// public async ValueTask PublishAsync( NotificationPublishContext context, CancellationToken cancellationToken = default) where TNotification : INotification { ArgumentNullException.ThrowIfNull(context); foreach (var handler in context.Handlers) { await context.InvokeHandlerAsync(handler, cancellationToken).ConfigureAwait(false); } } }