9

我有一个简单的 Azure Worker 角色正在运行,它每天下午 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 点发送电子邮件的方法,并且每天只触发一次。

我怎样才能实现一个调度程序,当时间是 12PM 时触发并执行DoSomethingElse()

我的问题是:这是(上面的代码)是最好的方法还是使用任何第三方工具。

4

4 回答 4

5

这里还有其他几个问题可以解决这个问题(我在上面标记了一个)。话虽如此,并且冒着重复其他答案已经说明的风险:

在您的情况下,Windows Azure 队列上的一条简单消息(延迟到中午才出现)将起作用。这也有助于处理多实例场景:如果您正在运行角色的两个实例,您不希望同一个计划任务运行两次,因此您需要一种方法让其中一个实例执行此代码。这可以通过队列消息轻松处理,或者您可以通过使用诸如 blob 租约(可能只有一个写锁)作为互斥锁在单个实例上运行调度程序代码。这在@smarx 的博客文章中有所介绍,这里

于 2012-06-05T12:50:37.593 回答
1

您还可以使用 Quartz.Net http://quartznet.sourceforge.net/ 使用上面提到的 blob 租约是确保只有一个实例托管任务的好方法。

使用 Quartz.Net 在 Windows Azure Worker 角色中安排作业

于 2013-01-20T19:00:51.887 回答
0

Cloud Scheduler 专门处理云中的任务调度。

我只是遇到了这个,所以我没有尝试过。

http://getcloudscheduler.com/

更新:忘记云调度程序!我连续运行了 600 次每日日程安排,最终向我的客户发送了 600 封电子邮件。不要用!!!

于 2014-07-28T01:59:31.523 回答
0

使用Azure 任务计划程序。Scott Gu 的很好的教程在这里

具体来说,我会查看 Storage Queue 操作类型 - 只需在您的 Worker Role 中注册队列事件。

(请注意,如果您想比每小时更频繁地安排任务,这项服务可能会花钱。)

于 2015-05-06T18:20:06.407 回答