// 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);
}
}
}