Я бы порекомендовал взглянуть на класс BackgroundWorker
, предоставленный в пространстве имен System.ComponentModel
.
Фоновый рабочий предоставляет необходимые методычтобы выполнить интенсивную работу в отдельном потоке и получать обновления статуса о ее ходе (через ReportProgress
, ProgressChanged
и RunWorkerCompleted
).
Я лично лично экспериментировал с использованием BackgroundWorker
в веб-среде для запуска запланированных задач.Я решил опубликовать работу, которую я проделал до сих пор на codeplex.Я чувствую, что дух моего кода может быть полезен для вашей ситуации. Проект кодекса «Web Scheduled Task Framework» .
Если вы решите загрузить проект, вы увидите, как я использую класс BackgroundWorker
в классе ScheduledTaskRunner
.Моя реализация не привязывает события прогресса к работнику, но это было бы очень легко сделать.Кроме того, моя текущая реализация фокусируется на выполнении задачи в заданном интервале, но изменение ее так, чтобы она была скорее очередью обработки «по требованию», не было бы очень сложным.Я могу даже добавить это как особенность теперь, когда я об этом думаю:)
Предполагая, что вы следовали подходу моего кода выше, было бы легко создать действие на вашем контроллере, который был запущен, будет проверятьсписок «заданий» (или интересующих вас конкретных заданий) и сообщайте информацию в виде ActionResult
.Настройте некоторый javascript для опроса действия в указанный интервал, и вы будете иметь успехи!
Удачи и дайте мне знать, если у вас есть какие-либо вопросы по поводу моего кода.