我有一个事件,当用户在页面上看到一些 html 块时触发,如果有多个 html 块 - 几乎同时触发多个事件。 我有一个处理程序来处理事件:
using MediatR;
public class EventHandler : INotificationHandler<BlockAccessedEvent> {
public async Task Handle(BlockAccessedEvent request, CancellationToken cancellationToken)
{
var session = await GetOrCreateLearningSession(cancellationToken);
session.BlocksVisited++;
session.AddEvent(LearningSessionEventType.BlockVisited, request.BlockId);
await unitOfWork.SaveEntityChangesAsync(cancellationToken);
}
}
我需要保存到db的是每个事件和事件的总和。所以结果应该是这样的:
会议桌
Id BlocksVisited
1 2
活动表
Id SessionId EventType
1 1 BlockVisited
2 1 BlockVisited
但我的问题是处理同时触发的多个事件,因此由于任务在调用 Handle() 方法时异步运行,因此在上一个任务保存更改之前检索会话,因此对于 BlocksVisited 列,取值为 1共 2 张:
会议桌
Id BlocksVisited
1 1
有没有办法让 Mediatr 通知处理程序成为单例?这样
session
将与 EF 上下文中的实例相同?
我会很感激任何帮助。