我在存储库中使用MediatR调度域事件。我的域层中的处理程序会产生副作用,需要在将数据添加到数据库之前对其进行处理,而我的应用程序层中的处理程序需要在提交后执行(即,将消息放入队列中或将电子邮件发送至客户)。
我遇到的问题是,开箱即用,所有处理程序将在执行之前或之后执行,但不能同时执行。有办法解决吗?
CommerceEntityFrameworkworkRepository.cs
public async Task Save(CancellationToken cancellationToken = default)
{
var eventsPublished = _db.ChangeTracker
.Entries<TAggregateRoot>()
.Select(entry => entry.Entity)
.ToList()
.SelectMany(aggregate =>
{
var @events = aggregate.GetEvents();
aggregate.ClearEvents();
return events;
})
.Select(@event => _mediator.Publish(@event, cancellationToken))
.ToList();
await Task.WhenAll(eventsPublished);
await _db.SaveChangesAsync(cancellationToken);
}
您可以在这里找到存储库:https://github.com/jakeam/MyShop