Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 特定时间间隔内的重复性任务?_C#_.net_Asp.net Mvc_Timer_Scheduled Tasks - Fatal编程技术网

C# 特定时间间隔内的重复性任务?

C# 特定时间间隔内的重复性任务?,c#,.net,asp.net-mvc,timer,scheduled-tasks,C#,.net,Asp.net Mvc,Timer,Scheduled Tasks,例如,我想在特定的时间间隔(每小时或每天的任务)调用函数 我已经在用定时器了。但只要我的本地服务器还在工作,它就会工作。例如: public static void StartYahooWeatherManager() { Timer t = new Timer(1000 * 60 * 60 * 6 /* 6 hours */); t.Elapsed += new ElapsedEventHandler(WriteYahoWeatherRssItemToDb); t.S

例如,我想在特定的时间间隔(每小时或每天的任务)调用函数

我已经在用定时器了。但只要我的本地服务器还在工作,它就会工作。例如:

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());
}
我每隔6小时将天气信息写入数据库。项目已在宿主中。只要我的计算机本地服务器正在运行,计时器事件就会一直工作

问题:

我的代码有什么问题?(或在WebProject中使用计时器的逻辑错误?)

管理时间间隔任务的最佳方法是什么?(不需要asp.net)


我希望我能解释这个问题。谢谢。

我的建议是创建一个使用计时器的Windows服务,或者创建一个普通应用程序并创建一个计划任务,以便在需要的时间间隔内运行它。这篇文章可以帮助你:


计时器停止的原因是,此计时器在ASP.NET应用程序中运行,而ASP.NET应用程序本身托管在web服务器上。当此服务器停止或回收应用程序时,AppDomain将与您可能已启动的所有线程一起关闭。这就是为什么在ASP.NET应用程序中编写重复的后台任务是一个非常糟糕的主意。菲尔·哈克


正确的方法是在ASP.NET应用程序之外的单独进程中宿主此代码。这可能是一个windows服务或控制台应用程序,计划使用windows调度器等定期运行。这样可以保证代码始终运行。

您可以禁用asp.net应用程序所属应用程序池的回收。对于.Net来说,内存泄漏是很少见的,因此您可以在大多数情况下依靠
GC
。这也将消除回收后的预热,并几乎不费吹灰之力改善用户体验


另一个好的解决方案是创建控制台应用程序并在windows“
任务调度器”
”中对其进行调度。您将有一个漂亮的
UI
来管理何时以及如何运行。维护此类任务比“
Windows服务”
”容易得多,并且需要编写更少的代码。

您真的需要在ASP.NET应用程序中这样做吗?你考虑过创建Windows服务吗?@RuiJarimba,没必要,我也问过<代码>管理时间间隔任务的最佳方法是什么?。对不起,我更新了问题。