Продолжайте выполнять длительную фоновую задачу после завершения API в .NET Core

#.net-core

Вопрос:

в настоящее время я создаю API для вставки данных, и у меня есть метод отправки электронной почты после вставки данных. Я хочу запустить методы отправки электронной почты для отдельной фоновой задачи, и я хочу, чтобы эти методы отправки электронной почты запускались мгновенно.

Я пытался использовать var task = Task.Run(() => SendEmail()); , но это прекратилось после завершения API.

И у меня есть исследование, какое-то применение Hangfire для этого, возможно ли сделать это без другой библиотеки?

Заранее спасибо

Комментарии:

1. Задача. Запуск должен работать, потому что он ставит работу в очередь в пул потоков, и пул потоков выполнит метод отправки почты, даже если метод действия завершен. Hangfire-тоже хороший вариант, если у вас много мест, где требуется фоновая работа 8, подобная этой.

Ответ №1:

Существует способ сделать это с помощью QueueUserWorkItem, который выделяет поток с веб-сервера вместо приложения. Все, что вы делаете в самом приложении, ненадежно, потому что приложение может быть перезапущено по ряду причин, а потоки могут быть прерваны.

Я бы поставил под сомнение мудрость разработки этого, особенно в отношении вашей логики обработки ошибок. Если сообщение электронной почты не удалось, и вы уже вернули запрос, вы не сможете предупредить пользователя и не сможете легко повторить попытку или даже зарегистрировать сбой без создания неаккуратного кода.

Одним из обходных путей является использование HostedService, который может предоставить «мини-микросервис», работающий в вашем приложении. Другой метод-просто делегировать вызов другой службе/приложению, чтобы, как только запрос будет сделан, вы могли вернуть вызов клиенту, как вы хотите, но разрешить этому другому приложению обрабатывать ошибки/повторные попытки/ведение журнала/постановку в очередь.