MediatR INotification Handler执行顺序
MediatR INotification Handler执行不保证顺序!!!
所以给一个 Notification 注册多个Handler 用法是错误的,
正确的用法是在 Handler 中注册下一个需要调用的 Handler
注册:

源码调试:


public class NewUserM : INotification
{
public string Username { get; set; }
public string Password { get; set; }
}
public class EmailHandler: INotificationHandler<NewUserM>
{
private static NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();
public Task Handle(NewUserM notification, CancellationToken cancellationToken)
{
Thread.Sleep(3000);
log.Info("EmailHandler OK");
return Task.FromResult(true);
}
}
public class NewUserMHandler : INotificationHandler<NewUserM>
{
private static NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();
public Task Handle(NewUserM notification, CancellationToken cancellationToken)
{
log.Info("NewUserMHandler OK");
return Task.FromResult(true);
}
}
//Controller
/// <summary>
/// 模拟多处理器
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public ActionResult Register2(NewUserM user)
{
_mediator.Publish(user);
return RedirectToAction("Login");
}
//startup
var types = new[] {
typeof(NewUserHandler),
typeof(LogHandler),
typeof(NewUserMHandler),
typeof(EmailHandler),
};
services.AddMediatR(types);
over

浙公网安备 33010602011771号