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