Вопрос по c# – Как запланировать задачу в рабочей роли Windows Azure
У меня запущена простая роль рабочего 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()
.
Мой вопрос: является ли это (приведенный выше код) лучшим методом или использовать какой-либо инструмент стороннего производителя.
http: //quartznet.sourceforge.net Использование упомянутой выше аренды блобов - отличный способ убедиться, что только один из ваших экземпляров выполняет задачи хостинга.
Использование Quartz.Net для планирования заданий в рабочих ролях Windows Azure
Azure Task Scheduler. Хороший урок от Скотта ГуВо.
В частности, я хотел бы взглянуть на тип действия «Очередь хранилища» - просто зарегистрируйте события очереди в своей рабочей роли.
(Обратите внимание, что эта услуга может стоить денег, если вы хотите планировать задачи чаще, чем каждый час.)
которые касаются этого (и я отметил один выше). Сказав это, и рискуя повторить, что другие ответы уже заявляют:
В вашем случае будет работать простое сообщение в очереди Windows Azure с задержкой по времени, которое не будет отображаться до полудня. Это также помогает справляться со сценариями с несколькими экземплярами: если вы запускаете два экземпляра своей роли, вы не хотите, чтобы одна и та же запланированная задача выполнялась дважды, поэтому вам нужен способ, чтобы только один из этих экземпляров выполнял этот код. Это легко обрабатывается с помощью сообщения очереди, или вы можете запустить код планировщика для одного экземпляра, используя что-то вроде аренды BLOB-объекта (который может иметь только одну блокировку записи) в качестве мьютекса. Это описано в блоге @ smarx,Во.