29 lines
949 B
C#
29 lines
949 B
C#
// 摘自 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;
|
|
|
|
/// <summary>
|
|
/// 使用 Task.WhenAll 等待通知处理器任务集合:
|
|
/// <code>
|
|
/// var tasks = handlers
|
|
/// .Select(handler => handler.Handle(notification, cancellationToken))
|
|
/// .ToList();
|
|
///
|
|
/// return Task.WhenAll(tasks);
|
|
/// </code>
|
|
/// </summary>
|
|
public class TaskWhenAllPublisher : INotificationPublisher
|
|
{
|
|
public Task Publish(IEnumerable<NotificationHandlerExecutor> handlerExecutors, INotification notification, CancellationToken cancellationToken)
|
|
{
|
|
var tasks = handlerExecutors
|
|
.Select(handler => handler.HandlerCallback(notification, cancellationToken))
|
|
.ToArray();
|
|
|
|
return Task.WhenAll(tasks);
|
|
}
|
|
} |