У меня есть моя рабочая роль, и мне нужно выполнять конкретную задачу ровно в 10 часов каждый день.
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
while (true)
{
if (DateTime.Now.Hour == 10)
{
//Do Specific timer Job();
}
//Do Normal Worker process();
Thread.Sleep(TimeSpan.FromMinutes(1));
}
}
Это запускает задание таймера несколько раз, так как я получаю только час, я не могу просто проверить его с конкретным временем, скажем, 10.00, так как есть вероятность, что он может быть пропущен основным рабочим процессом.
Мне нужно знать идеальный способ реализовать это.
Я видел эту ссылку и упоминал в ответах,
Как назначить задачу в роли рабочего рабочего окна azure
Но мне нужно решение без использования лазурного планировщика или любого стороннего инструмента: (В любом случае, с помощью которого я могу использовать таймеры для проверки в определенное время?
Возможно, вы можете использовать Azure WebJobs
http://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#Scheduler
А также, сегодня сообщение от Скотта Гензельмана с различными библиотеками, включая Quartz.Net от предыдущего комментатора.
http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx
Вставьте простое сообщение очереди и установите тайм-аут видимости этого сообщения. Чтобы сообщение было видно только в то время, и вы можете сделать действие.
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
while (true)
{
CloudQueueMessage queuemessage = queuestorage.GetMessage(queue name)
if(queueMessage.exist && queueMessage insertion time < 10 am today)
{
if (DateTime.Now.Hour >= 10)
{
//Do Specific timer Job();
//Delete the queue message and insert new one for the task next day.
}
}
//Do Normal Worker process();
Thread.Sleep(TimeSpan.FromMinutes(1));
}
}
}