这是在 C# 中制作简单“调度程序”的可接受方式吗?

Posted

技术标签:

【中文标题】这是在 C# 中制作简单“调度程序”的可接受方式吗?【英文标题】:Is this an acceptable way to make a simple "scheduler" in C#? 【发布时间】:2010-09-15 05:15:05 【问题描述】:

我正在.Net 中使用C# 制作一个简单的调度程序。它所做的只是每分钟对 SQL Server 数据库中的表执行一次简单的选择语句(这不需要扩展或任何东西......数据库没有高负载)。这是我建议的实现:

static void Main(string[] args)

    while (true)
    
        System.Threading.Thread.Sleep(timeout); // timeout is, say, 60000
        CheckTable();
    

这样好吗?有什么更好的方法?

附言有人建议使用 Windows Forms Timer 类……但这似乎有点过头了。

干杯!

【问题讨论】:

本题相关:***.com/questions/169332 【参考方案1】:

虽然它在技术上是合法的,但您可能最好使用计时器。它们不需要设置更多代码,您可以让运行时负责生成新线程。如果您需要在另一个程序中再次使用它,它也会造成性能瓶颈,而计时器不会。

计时器会添加更多代码,因为您需要使用计时器触发事件​​。

【讨论】:

这实际上取决于您是否希望多个线程同时运行同一个进程。【参考方案2】:

关闭。

    这将每(1 分钟 + 调用 proc 的时间)运行一次。也许没关系,也许不是。如果不行,您需要减去运行时间。 你应该在它周围有一个 try-catch 块。您不希望它仅仅因为临时数据库或网络问题而完全死掉。

【讨论】:

【参考方案3】:

Quartz.net 是一个很好的时序需求解决方案。它很容易设置(网站上有很好的教程),并且比定时器更灵活。 CronTrigger 非常强大,而且易于配置。

【讨论】:

以上是关于这是在 C# 中制作简单“调度程序”的可接受方式吗?的主要内容,如果未能解决你的问题,请参考以下文章

访客模式。 void* 是完全抽象接口的可接受返回类型吗?

图片的可点击区域

react/flux- 子组件用户事件 - 一切都应该通过调度程序路由吗

C# 4.0:我可以使用 TimeSpan 作为具有默认值的可选参数吗?

错误不一致的可访问性 - C#

这是将数组存储在数据库中的可接受情况吗?