如何在.NET MVC中以特定的时间间隔调用方法

时间:2012-08-22 19:55:49

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

我在MVC 3和C#中有一个Web应用程序。

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

Thansk。

相关

Call MVC Controller from Windows task scheduler

4 个答案:

答案 0 :(得分:10)

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

执行此操作的正确方法是在另一个应用程序中实现它。例如,这可以是Windows服务或计划在Windows Scheduler中定期运行的简单控制台应用程序。

答案 1 :(得分:4)

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();
    }

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

最好的方法是使用Azure函数。它正是针对此问题而设计的。实际上非常好。您可以随时使用计时器触发器来运行计划任务。

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