Вопрос по c# – Как запланировать задачу в рабочей роли Windows Azure

8

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

public override void Run()
{
    try
    {
        while (true)
        {
              int time = Convert.ToInt32(DateTime.Now.TimeOfDay);
              if (time == 12)
              {
                   DoSomethingElse();
              }
        }

    }
    catch (Exception ex)
    {
        Log.Add(ex, true);
    }            
}

ВотDoSomethingElse() - это метод отправки электронной почты каждый день в 12 часов, а также срабатывание один раз и только один раз в день.

Как я могу реализовать планировщик, который запускается, когда время 12:00 и выполняетDoSomethingElse().

Мой вопрос: является ли это (приведенный выше код) лучшим методом или использовать какой-либо инструмент стороннего производителя.

Напомним, что приведенный выше код вызовет замкнутый цикл с постоянной загрузкой ЦП на 100% и может заставить Azure перезапустить вашу рабочую роль. Вам нужно, по крайней мере, поместить в это утверждение сна. Или используйте таймер для ожидания. Но, в любом случае, из-за нескольких экземпляров вам нужно искать другие ответы на расписание, как то, о чем говорит Макогон. Frans

Ваш Ответ

4   ответа
1

http: //quartznet.sourceforge.net Использование упомянутой выше аренды блобов - отличный способ убедиться, что только один из ваших экземпляров выполняет задачи хостинга.

Использование Quartz.Net для планирования заданий в рабочих ролях Windows Azure

0

Я только что столкнулся с этим, поэтому я не пробовал.

http: //getcloudscheduler.com

Обновит: Забудьте облачный планировщик! Я запускал свой ежедневный график 600 раз подряд, в результате чего 600 писем отправлялось моим клиентам. Не используйте !!!

0

Azure Task Scheduler. Хороший урок от Скотта ГуВо.

В частности, я хотел бы взглянуть на тип действия «Очередь хранилища» - просто зарегистрируйте события очереди в своей рабочей роли.

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

Я согласен. Это самый простой способ. Просто используйте веб-крючок, чтобы вызвать событие. Планировщик заданий Azure смехотворно дорог, как бы то ни было. Peter de Bruijn
5

которые касаются этого (и я отметил один выше). Сказав это, и рискуя повторить, что другие ответы уже заявляют:

В вашем случае будет работать простое сообщение в очереди Windows Azure с задержкой по времени, которое не будет отображаться до полудня. Это также помогает справляться со сценариями с несколькими экземплярами: если вы запускаете два экземпляра своей роли, вы не хотите, чтобы одна и та же запланированная задача выполнялась дважды, поэтому вам нужен способ, чтобы только один из этих экземпляров выполнял этот код. Это легко обрабатывается с помощью сообщения очереди, или вы можете запустить код планировщика для одного экземпляра, используя что-то вроде аренды BLOB-объекта (который может иметь только одну блокировку записи) в качестве мьютекса. Это описано в блоге @ smarx,Во.

«Это легко обрабатывается с помощью сообщения в очереди». Но как обеспечить добавление только одного сообщения в очередь каждый день? Mike Asdf
Но я сомневаюсь, что, если я реализую его через сообщение очереди, та же проблема все еще существует, потому что несколько экземпляров создадут несколько сообщений очереди одновременно.? Hope
Правда, это проблема запуска. Рассмотрим мьютекс через блокировку BLOB-объектов. @smarx рассказал об этом в своем блогеВо. David Makogon
Azure теперь имеет простой сервис планировщика, который вызывает конечную точку на основе настраиваемого расписания. Проблема в том, что он не работает для длительных процессов. Тайм-аут составляет 30 с и не настраивается. AntonK

Похожие вопросы