Подскажите нормальный способ запустить из веба долгую фоновую операцию в .NET Core

Пусть у меня есть веб приложение .NET MVC. На странице есть кнопка "Запустить пересчет". Вызывается экшен контроллера. Экшен контроллера вызывает некий сервис, который выполняет очень долгий пересчет, оперируя данными из базы. Понятно дело, что вызывать эту логику из какого либо сервиса в экшене - так себе идея. Просто получим истечения ожидания времени ответа от сервера и на этом все кончится. А можно как то запустить, и пойти "по своим делам"? На другие страницы, я имею в виду. Еще было бы здорово иметь возможность посмотреть, доработало оно или нет. Выводить что нибудь в веб я имею в виду.

Единственный вариант, который мне пришел в голову - это создать Hosted service, где первым делом обращаться к базе, к специальной таблице, где стоит флаг - начинать пересчет или нет. Как только нажата кнопка "Запустить пересчет", этот флаг ставится в true, а хостед сервис при следующей итерации вызывает эту самую долгую логику пересчета. Как то аналогично, думаю, можно поступить и с банером "Пересчет работает" для веба.

Но есть ли способ с меньшим числом телодвижений? То что я тут рассказал, я имею в виду с базой и флагами в базе и с хостед сервсиом - это велосипед?


Ответы (0 шт):