3

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

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

谢谢。

有关的

从 Windows 任务调度程序调用 MVC 控制器

4

4 回答 4

10

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

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

于 2012-08-22T19:59:30.207 回答
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();
    }
于 2012-08-22T20:02:27.817 回答
0

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

于 2012-08-22T20:01:29.253 回答
-1

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

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

于 2019-04-03T23:51:10.963 回答