1

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

我想我知道该怎么做,但我不确定在哪里做,在我看来,我的控制器 global.asax 是否这样做?

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

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

4

4 回答 4

4

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

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

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

编辑

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

于 2012-11-13T09:18:26.540 回答
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:计时器

  • 如果您想长时间保持校准,计时器不是非常有效的解决方案

但是,如果您想朝这个方向追求它,那么另一种方式,我猜想实现您的结果的更“标准”方式可能是通过窗口服务,这个链接可能会对您有很大帮助。 Windows 服务应用程序简介

于 2012-11-13T09:34:46.853 回答
0

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

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

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

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

于 2012-11-13T09:33:51.350 回答
-1

使用 Azure 函数。您可以使用计时器触发器运行计划任务。这是相当不错。

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

于 2019-04-03T23:52:42.430 回答