在Azure中使用特定于时间的计时器

时间:2014-08-26 10:14:44

标签: c# asp.net azure timer scheduler

我有自己的工作角色,我需要在每天上午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,因为有可能它被主工作进程跳过。

我需要知道实现这一目标的理想方式。

我已经看到了这个链接以及答案中提到的那些,

How to Schedule a task in windows azure worker role

但我需要一个不使用azure调度程序或任何第三方工具的解决方案:( 无论如何,我可以使用计时器来检查具体的时间?

2 个答案:

答案 0 :(得分:1)

您可以使用Azure WebJobs

http://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#Scheduler

此外,Scott Hanselman的今天发布了各种各样的图书馆,包括以前评论员的Quartz.Net。

http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

答案 1 :(得分:0)

插入简单队列消息并设置该消息的可见性超时。这样消息只会在当时可见,您可以执行操作。

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));

        }
    }
}