// 摘自 MediatR 14.2.0,许可声明与修改记录见 LICENSE.md 和 UPSTREAM.md。 using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MAX.Notification.NotificationPublishers; /// /// 使用 Task.WhenAll 等待通知处理器任务集合: /// /// var tasks = handlers /// .Select(handler => handler.Handle(notification, cancellationToken)) /// .ToList(); /// /// return Task.WhenAll(tasks); /// /// public class TaskWhenAllPublisher : INotificationPublisher { public Task Publish(IEnumerable handlerExecutors, INotification notification, CancellationToken cancellationToken) { var tasks = handlerExecutors .Select(handler => handler.HandlerCallback(notification, cancellationToken)) .ToArray(); return Task.WhenAll(tasks); } }