【问题标题】:Use of timers to run an if statement hourly使用计时器每小时运行一次 if 语句
【发布时间】:2012-11-13 09:06:40
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

通常,Web 应用程序(MVC 或 WebForms)不是运行计划任务的最佳位置。可以这样做,但您会遇到诸如 IIS 回收应用程序池和其他异常情况,虽然这对 Web 应用程序很有用,但可能会妨碍可靠地调度任务。

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

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

编辑

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

【讨论】:

    【解决方案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

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

    但是,如果您想在这个方向上追求它,这个链接可能会对您有很大帮助。 Introduction to Windows Service Applications

    【讨论】:

    • 我最终使用了一段简单的代码来计算到时间结束的时间,然后将结果设置为刷新的间隔。感谢您的 cmets
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 嗨,我确实的意思是我想在整点刷新页面,但我想看看是否可以重新运行我拥有的 if 语句并“推送”结果到浏览器,以免刷新整个页面。我想我现在看到一个简单的刷新将是最好的解决方案。感谢您的 cmets
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多