【问题标题】:How to call a method at specific interval of time in .NET MVC如何在 .NET MVC 中以特定时间间隔调用方法
【发布时间】:2012-08-22 19:55:49
【问题描述】:

我有一个使用 MVC 3 和 C# 编写的 Web 应用程序。

我需要每 1 小时运行一次方法,时间不受限制。我想知道如何实现它。

谢谢。

相关

Call MVC Controller from Windows task scheduler

【问题讨论】:

  • 为了让您的 Web 应用程序运行任务,您通常会在 global.asax 中定义/设置它。然而,问题是 Web 应用程序通常在不使用时回收/进入睡眠状态。这将阻止您的定时操作连续执行。如果您可以访问服务器,则最好使用 Windows 服务进行此类操作

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


【解决方案1】:

您可以使用System.Timers.Timer。但请注意implementing recurring background tasks in ASP.NET applications 是一项危险的任务。不要忘记,IIS 可以随时在某些情况下(站点上的非活动期、达到 CPU/内存阈值...)回收应用程序池,从而关闭您可能已启动的所有后台任务。

执行此操作的正确方法是在另一个应用程序中实现它。例如,这可能是一个 Windows 服务或一个简单的控制台应用程序,该应用程序被安排为使用 Windows 调度程序定期运行。

【讨论】:

  • 感谢 Darin Dimitrov,您能否指出一些有关 Windows 服务或简单控制台应用程序的资源
【解决方案2】:

Darin 是正确的,但是,如果您必须在您的应用程序中执行此操作,那么您可以这样做:

在 Global.asax.cs 中

    static void ScheduleTaskTrigger()
    {
        HttpRuntime.Cache.Add("ScheduledTaskTrigger",
                              string.Empty, 
                              null, 
                              Cache.NoAbsoluteExpiration, 
                              TimeSpan.FromMinutes(60), // Every 1 hour
                              CacheItemPriority.NotRemovable, 
                              new CacheItemRemovedCallback(PerformScheduledTasks));
    } 

    static void PerformScheduledTasks(string key, Object value, CacheItemRemovedReason reason)
    {
       //Your TODO

       ScheduleTaskTrigger();
    }

    void Application_Start(object sender, EventArgs e)
    {
          ScheduleTaskTrigger();
    }

【讨论】:

    【解决方案3】:

    理想情况下,请改用 Windows 服务或计划任务

    【讨论】:

      【解决方案4】:

      最好的办法是使用 Azure Functions。它就是为这个问题而设计的。其实还不错。您可以随时使用计时器触发器运行计划任务。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-04
        • 2018-10-30
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        相关资源
        最近更新 更多