我在MVC 3和C#中有一个Web应用程序。
我需要每隔1小时运行一次方法,无限时间。我想知道如何实现它。
钽ँSK。
有关
你可以使用System.Timers.Timer。但请注意implementing recurring background tasks in ASP.NET applications是一项危险的任务。不要忘记IIS可以随时回收应用程序池,并且在某些情况下(站点上不活动的时间段,达到CPU /内存阈值,......),可以降低您可能已启动的所有后台任务。
正确的方法是在另一个应用程序中实现它。例如,这可以是Windows服务或计划在Windows Scheduler中定期运行的简单控制台应用程序。
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();
}
理想情况下,请改用Windows服务或计划任务
最好的办法是使用Azure Functions。它专为这个问题而设计。它实际上非常好。您可以随时使用计时器触发器运行计划任务。
https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview