Ограничить запрос действия контроллера по одному за раз - PullRequest
0 голосов
/ 02 октября 2019

У меня есть метод ниже в моем FileController:

[HttpPost]
[NoAsyncTimeout]
public ActionResult FileGenerator(FileViewModel model) {
...
_fileGenerator.CreateFile(model.Id,model.location);
...
}

Метод CreateFile определен ниже:

public void CreateFile(int residentId, string location){ 
 ...
 var caller = new AsyncMethodCaller(GenerateFilesAsync);
 caller.BeginInvoke(residentId,location, new 
 AsyncCallback(GenerateFilesCallBack));
 ...
}

Из того, что я знаю, AsyncMethodCaller и BeginInvoke для обработки файласоздание в другом потоке, чтобы он не блокировал интерфейс. Вышеупомянутый метод вызывается веб-приложением, и несколько пользователей могут отправлять запросы контроллеру Action FileGenerator - он будет обрабатывать процесс генерации файла одновременно (может быть в нескольких потоках).

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

Есть ли какой-либо механизм или метод в MVC, чтобы поставить в очередь запросы действий от пользователей?

1 Ответ

1 голос
/ 02 октября 2019

Вы можете использовать класс Queue в C #. Вместо того, чтобы создавать новый поток для каждого запроса, я бы предложил использовать один поток для мониторинга очереди и вызвать метод FileGenerator для создания файла. Вам также не нужно будет делать его асинхронным в этом случае.

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

Это, вероятно, грубый способ управления очередью:)

Лучше было бы использовать стандартную очередьМеханизмы MSMQ, но опять же, зависит от сложности приложения и требуемой масштабируемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...