c# - 在 Azure 辅助角色中以不同的时间间隔执行任务

标签 c# azure scheduled-tasks

我正在运行一个简单的 Azure Worker 角色,每隔几秒执行一次任务。下面是完成此操作的代码。

    public override void Run()
    {
        try
        {
            while (true)
            {
                DoSomething();
                System.Threading.Thread.Sleep(3000);
            }

        }
        catch (Exception ex)
        {
            Log.Add(ex, true);
        }            
    }

我现在想做的是添加第二个任务 DoSomethingElse(),该任务每天触发一次且仅触发一次。我想了几种方法来实现这一目标:

  1. 添加一个计数器,每 n 个循环调用新任务
  2. 向新任务添加条件逻辑,将当前时间与一天中的规定时间进行比较
  3. 使用一些 TBD 调度程序库(例如 Quartz.NET)

前两个解决方案让我觉得非常脆弱,没有额外的代码来处理服务停止和重新启动的情况。第三个解决方案让我觉得可能有点矫枉过正。

我的问题是,在 Azure 辅助角色中按不同时间间隔安排任务的最佳实践是什么?我稍微倾向于坚持直接使用 .NET 而不是使用第三方库(尽管我不排除这种可能性)。

注意,上面的 #3 来自这个较旧的问题 Recommend a C# Task Scheduling Library

最佳答案

前两个选项是最简单的,但它们很脆弱 - 特别是在云中,角色可以回收/负载平衡等...如果持久性位于内存中,甚至是基于云中的磁盘,那么它将很脆弱.

除了其他第三方选项之外,您还可以考虑将计划和执行数据保存到外部存储(表服务、sql azure 等)中。在定期计时器上,辅助角色可以查询要执行的作业,记录启动情况,然后运行作业。这还允许您潜在地扩展辅助角色的数量,因为它的持久性是外部的。

这可能很快就会变得复杂,但如果你保持简单的频率和记录运行时间,它可能会相当简单。

关于c# - 在 Azure 辅助角色中以不同的时间间隔执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283399/

相关文章:

powershell - 如何使用 PowerShell 在 Azure 存储表中获取行?

从任务计划程序运行的Powershell脚本无法打开Word文档

c# - 创建一个 Rich Repeater,DataBind 消除自定义添加的控件

c# - 如何比较两个对象之间的属性

ExecuteQuerySegmentedAsync 与 ExecuteQuery 的 Azure 表查询限制

azure - 具有本地 AD 集成的 SaaS 产品

spring - 如何从 db 加载 cron 表达式并使用 Spring 重新安排它?

java - 每天特定时间运行一个jar文件的解决方法

c# - 列表框滚动条在没有任何命令的情况下移动

c# - Silverlight 使用阈值转换值