使用计时器每小时运行一次if语句

时间:2012-11-13 09:06:40

标签: c# asp.net asp.net-mvc-3 timer

我一直在阅读关于计时器的负载,以及实现我的目标的选项,我相信我需要使用system.timers.timer并正确设置间隔。

我想我知道如何做到这一点,但我不确定的是在哪里做,在我看来,我的控制器,global.asax?

也许我根本不应该使用计时器?

我正在寻找的是在小时,每小时运行if语句的最佳方式,并根据结果更新视图,如果

4 个答案:

答案 0 :(得分:4)

通常,Web应用程序(MVC或WebForms)不是运行计划任务的最佳位置。它可以完成,但是你会得到像IIS回收应用程序池和其他异常这样的东西,虽然它对Web应用程序很有用,但可能妨碍可靠地调度任务。

许多开发人员(以及我最喜欢的人)在Windows Service中安排他们的任务。这可以安装,并且可以设置为在服务器启动和关闭时正常启动和停止。然后,您可以设置日志记录和其他运行状况监视,以监视调度程序服务的状态。

但是,如果您的任务纯粹基于SQL,则可能希望使用SQL Server的内置调度(或类似于任何其他数据库)。另一种方法是使用操作系统的调度程序。

修改

关于使用结果更新视图,您可以使用“TaskStatus”(新建,等待,运行,中止,失败,取消,已完成)等列来存储和更新数据库中计划任务的状态。 TaskResult'(成功时可能为空或失败时出现错误消息)。然后,您可以通过从数据库中检索此结果视图来显示和过滤此信息。

答案 1 :(得分:2)

JavaScript - On Your Page: 您可以重定向到控制器>通过JavaScript实现您所需功能的操作:

<script type="text/JavaScript">
setTimeout("location.href = '/YourDefineUrlPathHere';",1500);
</script>

HTML Meta tag - On Your Page: 另外,如果你想再次调用你的视图动作(换句话说刷新它),你可以通过元标记来实现它。

<head>
<meta http-equiv="Refresh" content="15;url='/YourDefineUrlPathHere'"> 
<!—‘15’ is number of seconds you want to wait-- >
</head>

Timers – in your controller

aTimer = new System.Timers.Timer(10000);
aTimer.Elapsed += new ElapsedEventHandler(YourMethodHere);
aTimer.Interval = 2000;
aTimer.Enabled = true;

请参阅MSDN: Timer

  • 如果你想长时间保持囤积,定时器不是非常有效的解决方案

然而另一种方式,我想更多'标准'的方式来实现你的结果可能是通过Window服务,如果你想在这个方向追求它这个链接可能会帮助你很多。 Introduction to Windows Service Applications

答案 2 :(得分:0)

“更新视图”是什么意思?

MVC视图是一个类 - 您只能“更新”具有值的对象。当用户请求页面时,视图会被实例化。

如果您的意思是希望用户始终在浏览器中打开页面并且每小时刷新一次,那么您可以在客户端的javascript中使用计时器来每小时重新加载页面。

如果您的意思是要根据每小时更改的数据更新打开页面的任何用户的结果,您可以将最后更新时间存储在数据库中,然后在视图运行时检查数据是否超过小时。如果是,请在控制器中运行if语句。

答案 3 :(得分:-1)

使用Azure函数。您可以使用计时器触发器运行计划的任务。很好。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview