如何创建每小时运行一次的线程? APS.NET WebApi

时间:2016-03-09 06:51:25

标签: c# asp.net asp.net-web-api

如何创建thread或每小时运行一次功能的任务?例如,更新数据库中依赖于时间的数据。我可以在Application_Start()文件中的Global.asax方法中创建线程,是吗?

2 个答案:

答案 0 :(得分:3)

一般情况下:你没有。

您提供触发操作的终点(URL),并且每小时调用一次。这显然可以自动发生。

例如http://www.mywebcron.com/可以每小时给您打电话一次,没有问题。

这可以避免在您成长(多个Web服务器)或重新启动应用程序后遇到的所有问题。

ASP.NET很多 - 它不是调度程序。

答案 1 :(得分:2)

我不是从asp.net运行计划任务的忠实粉丝,但是如果你需要,你可以使用与之相同的方法来使用和触发CacheItemRemoved上的事件。 你可以看到Jeff Attwood的博文here。但基本上只需订阅CacheItemRemoved事件并从那里激活你的任务。

private static CacheItemRemovedCallback OnCacheRemove = null;

protected void Application_Start(object sender, EventArgs e)
{
    AddTask("DoStuff", 60);
}

private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null, 
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);
}

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
    // do stuff here if it matches our taskname, like WebRequest
    // re-add our task so it recurs
    AddTask(k, Convert.ToInt32(v));
}