Вопрос

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

Мне нужно, чтобы приложение ASP.Net периодически проверяло вторую очередь, чтобы увидеть, выполнены ли какие-либо задачи.

Где лучше всего сделать такую ​​петлю?Global.asax?

Я помню, как где-то читал, что функцию можно вызвать после интервала.Это подойдет?

Это было полезно?

Решение

Для выполнения периодических задач на asp.net я нашел два приемлемых подхода:

  1. Создайте поток во время Application_Start в global.asax в цикле while (1) Выполните работу (2) Приостановите поток на некоторое время.
  2. Снова в Application_Start вставьте фиктивный элемент в кеш asp.net, срок действия которого истекает через определенный интервал, и дайте этому элементу кеша обратный вызов, который будет вызываться по истечении срока его действия.В этом обратном вызове вы можете выполнить всю работу и вставить элемент кэша обратно таким же образом.

В обоих случаях вам необходимо убедиться, что ваш поток продолжает работать, даже если происходит ошибка.Вы можете поместить код восстановления в SessionStart и BeginRequest, чтобы проверить наличие вашего потока или элемента кэша, и обновить его, если с ним что-то случилось.

Другие советы

Я предполагаю, что это делается регулярно и что какой-то другой процесс помещает элементы в очередь?

Если это так, вы можете поместить в Global.asax что-то, что при запуске приложения создает отдельный поток, который просто отслеживает очередь, вы можете использовать таймер, чтобы этот поток находился в режиме сна в течение X секунд, а затем проверять результаты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top