Есть ли способ вернуть ответ от вызова API в ASP.NET при сохранении работоспособности экземпляра? - PullRequest
1 голос
/ 23 мая 2019

Я пишу API с использованием ASP.NET, и у меня есть потенциально долго работающий код из разных конечных точек.Система использует CQRS и Event Sourcing.Команда входит в конечную точку и затем публикуется как событие с использованием MediatR.Однако обработчики потенциально долго работают.Поскольку некоторые из поступающих запросов могут быть отправлены нескольким обработчикам.Этот процесс может занять больше, чем 12 секунд, которые AWS разрешает перед возвратом кода ошибки.

Есть ли способ вернуть ответ вызывающей стороне, чтобы сказать, что событие было создано, хотя оно все еще находится в процессе?То есть запустить отдельную задачу, которая выполняет долго выполняющийся фрагмент кода, который также перехватывает и регистрирует ошибки.Затем вернуть значение обратно пользователю, говоря, что событие было успешно создано?

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

Возможно, я ошибаюсьВот несколько моментов, это мои знания, полученные из Интернета, но я мог бы неправильно понять статьи.

Спасибо.

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Да, вы должны передать долгосрочную задачу фоновому процессу и вернуться к пользователю. Когда задача будет выполнена, уведомите пользователя с помощью любого механизма, подходящего для вашего сайта.

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

1 голос
/ 23 мая 2019

Если новый поток выполняет длительную операцию, он останется «открытым / активным», пока не завершится.Также вы можете настроить пул приложений, чтобы он всегда был активным.

Существует множество платформ для работы с такими долго выполняющимися задачами, как Hangfire.

И чтобы держать пользователя в курсе состояния задачи, вы можете использовать SignalR для отправки уведомлений в пользовательский интерфейс

...