【问题标题】:Scheduling tasks Advice? .Net, SQL Job?调度任务 建议? .Net,SQL 作业?
【发布时间】:2011-03-09 07:12:29
【问题描述】:
我正在创建一个系统,用户可以在其中设置邮件在特定时间发出。在我成为之前,我想得到一些建议。首先,是否已经有一个 .Net 组件可以处理调度作业(运行另一个应用程序或调用 URL)来执行我的建议(开源会很酷)?如果没有,最好在 SQL 中安排作业并运行某种脚本,创建一个 .Net 服务来查看 xml 文件或 db 以获取日程安排,还是让应用程序创建计划任务?可能有大量任务,所以我认为创建计划任务或 SQL 作业可能不是一个好主意。
这里可能是一个典型的场景;用户想要向他们的客户发送新闻通讯。用户在星期六创建时事通讯,但不希望它在星期一发布。用户希望在一个月内每周一发送同一封电子邮件。
感谢收看!
【问题讨论】:
标签:
sql-server
.net-3.5
scheduled-tasks
【解决方案1】:
查看Quartz.NET
Quartz.NET 是一个功能齐全、开放的
源作业调度系统,可以
从最小的应用程序到大型应用程序都可以使用
扩展企业系统。
【解决方案2】:
如果您想在 Windows 本身中使用现成的服务,请查看 CodeProject 上的这篇文章 A New Task Scheduler Task Library,了解如何从您的 C# 应用程序在 Windows 中创建计划任务。
如果您在 Windows 中使用 C# 和计划任务,而不是将自己限制在 SQL Server 中可以完成的事情,您可能会拥有更大的灵活性和功能。 SQL Server 代理作业非常棒 - 用于数据库特定的东西,主要是 - 维护计划等等。
【解决方案3】:
您可以构建自己的 Windows 服务来安排和执行作业。一定要做好抽象。在一个类似的项目中,我使用了一种抽象,其中调度项目被抽象为由任务组成的作业。例如,发送时事通讯可能是一项工作,而向每个订阅者发送时事通讯可以被视为一项任务。然后,您需要在定义的线程模型中运行作业和任务,最好使用线程池线程或任务并行库。确保尽可能对 IO 使用异步 API。还将您的调度逻辑与抽象分开。以便调度逻辑可以执行任意类型的作业及其包含的任务。