Asp.net MVC обрабатывает задачу асинхронно - PullRequest
2 голосов
/ 07 сентября 2011

Я работаю над приложением asp.net mvc, у которого есть одно из следующих требований:

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

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

Итак, я подумал о создании потока переднего плана с использованием класса Thread. Но в одной из статей, которые я прочитал, упоминается, что asp.net не будет проверять, является ли это приоритетным потоком или нет, и не будет полезен. Это правда?

В настоящее время я смотрю на следующие предложения. Пожалуйста, предложите

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

  2. Служба WCF для получения сообщения и обработки

Любые другие лучшие идеи, пожалуйста, поделитесь

Спасибо

Sveerap

1 Ответ

0 голосов
/ 07 сентября 2011

Вы можете просто использовать:

ThreadPool.QueueUserWorkItem(o =>
                                    {
                                        // do something aync
                                    });

Предыдущие комментарии по этому поводу:

Существует множество аргументов в пользу истощения пула запросов потока, выполнивэто (что верно), но контраргументом является то, что вы должны голодать пул, потому что сервер занят выполнением работы.Конечно, в идеале вы должны перенести работу на другой сервер полностью через системы очередей / распределенные системы и т. Д., Но это сложное решение.Если вам не нужно обрабатывать сотни запросов, вам не нужно рассматривать эту опцию, поскольку вряд ли это когда-либо вызовет проблему.Это действительно зависит от требований к масштабируемости вашего решения, сколько времени займет фоновый процесс и как часто он называется.

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