我有自己的工作角色,我需要在每天上午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调度程序或任何第三方工具的解决方案:( 无论如何,我可以使用计时器来检查具体的时间?
答案 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));
}
}
}