如何在asp.net中运行自动“作业”?

时间:2009-03-27 21:58:40

标签: c# asp.net

我想让我的网站每10分钟进行一次计算,然后用结果更新数据库。我究竟如何设置这样一个计时器,我假设它将在global.asax中?

6 个答案:

答案 0 :(得分:4)

最好编写一个单独的非UI应用程序,然后将其作为计划任务运行。

答案 1 :(得分:4)

在Web应用程序中做类似的事情介于困难和不稳定之间。 Web应用程序根本不是为了不间断地运行,而是为了回复请求。

你真的需要每十分钟做一次计算吗?我发现在大多数情况下,当有人问这样的问题时,他们真的只需要间隔运行的东西的外观,但只要没有人访问页面看结果,结果就不需要计算。

如果您的情况也是如此,那么您只需要跟踪上次计算完成的时间,并检查每次请求是否有足够的时间重新计算。

答案 2 :(得分:3)

除了关于计划任务执行的Web应用程序不稳定性的(正确)陈述之外,这里是您可以实施的策略:

在global.asax中

,定义application.onstart事件,其中create timer:

var dueTime = 5000;
var period = 5000;
var MyTimer = new Timer(new TimerCallback(MyClass.MyTaskProc), null, dueTime, period);
Application["MyTaskTimer"] = MyTimer;

如果应用程序退出

,这将非常注重创建任务并重新启动它

答案 3 :(得分:2)

如果是严格的数据库计算,请将其保存在数据库中。创建一个执行所需操作的存储过程,然后让SQL Server代理按计划运行该过程。

答案 4 :(得分:0)

cagdas回答中的缓存解决方案有效。我用过它。唯一不足的是,如果因某种原因需要暂停计时器,很难将其关闭。我们使用的替代但不完全相同的解决方案。

  1. SQL Server中的计划任务
  2. 预定的Windows任务。

答案 5 :(得分:0)

我真的不喜欢计划任务。我宁愿将此函数放在Windows服务器中并在其中抛出一个计时器。通过窗口服务,您可以非常好地处理停止事件。我同意其他所有人,网站不是这个地方。