Я работаю в фирме по автоматизации, поэтому мы создаем процессы для промышленной автоматизации.Ранее эта автоматизация выполнялась на стороне машин, но мы постепенно переходим к управлению машинами с помощью c #.
В моем текущем проекте производство за один день занимает около 2 часов.Операторы фабрики имеют веб-интерфейс, который мы создали в c # с использованием ядра MVC asp.net, в котором они могут запустить / приостановить / остановить этот производственный процесс.
При запуске процесса мы ожидаем функцию в нашем контроллереэто в основном цикл while, который контролирует этот 2-часовой процесс производства.
Проблема в том, что когда я отправляю запрос REST для запуска производства, этот запрос занимает 2 часа, я бы предпочел, чтобы этот запрос немедленно завершился.и производственный процесс начинается на фоне моего основного приложения asp.net.
Сначала я подумал, что могу просто пропустить ожидание и просто сделать это в моем контроллере (упрощенный код):
_ = _productionController.StartLongProcess(); // This contains the while loop
return Ok();
Но так как _productionController находится в области действия и все его зависимости также, они сразу же удаляются, когда метод возвращается, и я больше не могу получить доступ к моей базе данных, например.
Процесс должен иметь возможность непрерывнопоговорить с нашей базой данных, чтобы сохранить информацию оПроизводственный процесс в случае, если что-то выходит из строя, таким образом, мы всегда можем отследить, где остановились.
Мой вопрос к вам сейчас, не решаем ли мы это неправильно?Я полагаю, что это плохая практика - запускать эти долго работающие процессы в контроллере asp.net.
Как мне убедиться, что у меня всегда есть доступ к моему DatabaseContext в этом длительном процессе, даже если запрос REST уже завершен.Создать отдельную область только для этого метода?