在asp.net做预定的后台工作

我需要在我的asp.net应用程序中定期执行某项任务,所以这样做:

protected void Application_Start() { Worker.Start(); } ... public static class Worker { public static void Start() { ThreadPool.QueueUserWorkItem(o => Work()); } public static void Work() { while (true) { Thread.Sleep(1200000); //do stuff } } } 

这种做法好吗?

我看到一个关于在这个网站上授予徽章的博客是使用asp.net缓存黑客完成的: http : //blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

您可以将Timer类用于此类任务。 我在我自己的ASP.NET聊天模块中使用这个类在一些过期时间之后关闭房间并且它工作正常。 我认为,这比使用Thread.Sleep更好

下面的示例代码:

 using System; using System.IO; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Worker.Start(); Thread.Sleep(2000); } public static class Worker { private static Timer timer; public static void Start() { //Work(new object()); int period = 1000; timer = new Timer(new TimerCallback(Work), null, period, period); } public static void Work(object stateInfo) { TextWriter tw = new StreamWriter(@"w:\date.txt"); // write a line of text to the file tw.WriteLine(DateTime.Now); // close the stream tw.Close(); } } } } 

你的方法会起作用,但正如Lucasus所说,更好的方法是使用Timer类 。

除此之外,如果您拥有运行站点的计算机,我建议您使用Windows服务进行计划任务。 这种方法本身比asp.net基础设施中的任何类型的计时器都更有益。 这是因为在asp.net中运行的所有内容都将由asp.net引擎管理,而这不是你想要的。 例如,工作流程可以回收,此时您的任务将会中断。

有关Windows服务中计时器的详细信息,请访问: 计时器和Windows服务 。

有关Windows服务的信息可以在这里找到: Windows服务

要将计时器安装到Windows服务中,您需要在开始时创建它并处理它触发的事件。

如果您想进行预定的工作,为什么不使用Windows任务计划程序?

我发现的一些信息可能很有用: http : //www.codeproject.com/KB/cs/tsnewlib.aspx

短剑的一种