Ali*_*hşi 5 .net c# asp.net-mvc timer scheduled-tasks
例如,我想以特定的时间间隔(每小时或每日任务)调用一个函数.
我已经在使用Timer了.但只要我的本地服务器正常工作,它就能工作.例如:
public static void StartYahooWeatherManager()
{
Timer t = new Timer(1000 * 60 * 60 * 6 /* 6 hours */);
t.Elapsed += new ElapsedEventHandler(WriteYahoWeatherRssItemToDb);
t.Start();
}
private static void WriteYahoWeatherRssItemToDb(object o, ElapsedEventArgs e)
{
YahooWeatherManager.InsertYahooWeatherRssItem(YahooWeatherManager.GetYahooWeatherRssItem());
}
Run Code Online (Sandbox Code Playgroud)
我以6小时为间隔向db发送天气信息.项目已经在主持人.只要我的计算机本地服务器正在运行,Timer事件就会起作用.
题:
我的代码有什么问题?(或者在WebProject中使用计时器的逻辑错误?)为什么计时器只在本地服务器工作时工作?
管理时间间隔任务的最佳方法是什么?(不需要asp.net)
我希望,我可以解释这个问题.谢谢.
计时器停止的原因是因为此计时器在您的ASP.NET应用程序中运行,该应用程序本身托管在Web服务器上.当此服务器停止或回收应用程序时,AppDomain将与您可能已启动的所有线程一起关闭.这就是为什么在ASP.NET应用程序中编写重复的后台任务是一个非常糟糕的主意.菲尔哈克blogged about the dangers.
执行此操作的正确方法是将此代码托管在ASP.NET应用程序之外的单独进程中.这可以是Windows服务或控制台应用程序,它计划使用例如Windows调度程序定期运行.这样,代码可以保证始终运行.
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |