Асинхронный запуск и забыл операцию с обратным вызовом - PullRequest
1 голос
/ 20 февраля 2011

У меня есть приложение Mvc3 с форумной областью, где вопросы можно отправлять также по электронной почте.

Процесс получения писем с разных учетных записей, их анализа и вставки в БД очень медленный.

Сначала я подумал о создании отдельной службы Windows с некоторым запланированным процессом, который будет выполнять всю отдельную обработку электронной почты каждые несколько секунд.

Я пришел к мысли, что лучшим подходом будет инициированиепроцесс проверки / анализа электронной почты, когда пользователь попадает на страницу раздела форума.Таким образом, сценарий будет:

  1. Пользователь открывает область форума страницы в приложении mvc
  2. Инициируется асинхронный процесс, который будет выполнять все медленные вещи, процесс может быть инициированчерез вызов jquery / javascript к контроллеру при загрузке страницы.
  3. Контроллер будет вызывать службу парсинга электронной почты и немедленно вернется (запустить и забыть).
  4. Все последующие вызовы, также от других пользователей к тому же контроллеру, который инициирует обработку электронной почты, будут игнорироватьсяво время работы.
  5. Когда процесс будет завершен, также, если пользователь находится на другой странице, он будет уведомлен, если появятся новые вопросы, и в конечном итоге страница будет обновлена ​​(всегда с помощью вызова jquery).

Есть ли лучшие подходы или какие-либо возможные потери производительности для этого подхода?Должен ли я пойти с отдельной службой Windows?

1 Ответ

1 голос
/ 21 февраля 2011

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

...