MediatR NotificationHandler失控

时间:2018-10-12 16:03:12

标签: c# mediatr fire-and-forget

如何使MediatR通知处理程序触发并忘记?

我的示例代码:

public class BackupDatabase : INotification {}

public class BackupDatabaseNotificationHandler : INotificationHandler<BackupDatabase>
{
    public async Task Handle(BackupDatabase notification, CancellationToken cancellationToken)
    {
        await Task.Delay(100000000);
    }
}

public async Task<IActionResult> SomeAction()
{
    await _mediator.Publish(new BackupDatabase());
    return Json(true);
}

我知道一种方法是使用Task.Factory.StartNew,但是还有另一种方法吗?

1 个答案:

答案 0 :(得分:2)

Mediatr通知处理程序已经启动并忘记了。

处理此问题的另一种方法是将后台任务排队以完成工作。查看类似Hangfire的东西,并以_mediator.Send()或_mediator.Publish()方法实现。

Hangfire将使您能够监视后台任务,并能够根据需要自动重试该任务。

如果无法使用Hangfire,则有some other options

希望这会有所帮助!