Как я могу заставить мой обработчик уведомлений 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, но есть ли другой способ?
@mason, пример - резервная копия базы данных. Лучше отправка электронной почты и смс.
Тем не менее - что, если ваше приложение внезапно перестанет отправлять электронную почту или SMS, и единственный способ узнать об этом - это ваши клиенты начнут жаловаться? Это тоже не должно быть "выстрелить и забыть". Если вы пишете код, вы хотите, чтобы этот код работал успешно. Если это не так, вы хотите знать об этом, чтобы исправить.





Обработчики уведомлений Mediatr уже запустили и забыли.
Другой способ справиться с этим - поставить в очередь фоновую задачу для выполнения работы. Посмотрите на что-то вроде Hangfire и реализуйте это в методе _mediator.Send () или _mediator.Publish ().
Hangfire даст вам возможность отслеживать фоновую задачу и при необходимости автоматически повторить попытку.
Есть некоторые другие варианты, если Hangfire вам не подходит.
Надеюсь это поможет!
Вы должны быть очень осторожны с выражением «выстрелил и забыл». Обычно это означает «выполнить этот код, но я не собираюсь отслеживать, успешно он завершился или нет». Для чего-то важного, например резервного копирования базы данных, вы, скорее всего, не захотите по-настоящему выстрелить и забыть. Вы хотите, чтобы работа выполнялась асинхронно.