C# 在asp.net中执行预定的后台工作
我需要在我的asp.net应用程序中定期执行某项任务,因此执行了以下操作:C# 在asp.net中执行预定的后台工作,c#,.net,asp.net,multithreading,C#,.net,Asp.net,Multithreading,我需要在我的asp.net应用程序中定期执行某项任务,因此执行了以下操作: protected void Application_Start() { Worker.Start(); } ... public static class Worker { public static void Start() { ThreadPool.QueueUserWorkItem(o => Work()); } public static void Work
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缓存黑客完成的:
您可以将类用于这样的任务。我在自己的ASP.NET聊天模块中使用这个类来关闭过期时间后的聊天室,它运行良好。
我想,这是
以下示例代码:
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();
}
}
}
}
您可以将类用于这样的任务。我在自己的ASP.NET聊天模块中使用这个类来关闭过期时间后的聊天室,它运行良好。
我想,这是
以下示例代码:
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();
}
}
}
}
你们的方法会奏效,但正如卢卡斯所说的,更好的方法将会被使用 除此之外,如果您拥有运行站点的计算机,我建议您在计划任务时使用Windows服务。这种方法将证明自己比asp.net基础结构中的任何类型的计时器都更有益。这是因为在asp.net中工作的所有内容都将由asp.net引擎管理,而这不是您想要的。例如,工作进程可以循环使用,此时您的任务将中断 有关windows服务中计时器的详细信息可在此处找到: 有关windows服务的信息可在此处找到:
要将计时器输入windows服务,您需要在启动时创建它并处理它触发的事件。您的方法会起作用,但正如Lucasus所说,将使用更好的方法 除此之外,如果您拥有运行站点的计算机,我建议您在计划任务时使用Windows服务。这种方法将证明自己比asp.net基础结构中的任何类型的计时器都更有益。这是因为在asp.net中工作的所有内容都将由asp.net引擎管理,而这不是您想要的。例如,工作进程可以循环使用,此时您的任务将中断 有关windows服务中计时器的详细信息可在此处找到: 有关windows服务的信息可在此处找到:
要将计时器输入windows服务,您需要在启动时创建它并处理它触发的事件。如果要执行计划的工作,为什么不使用windows任务计划程序 我找到的一些信息可能有用:
Kris如果您想执行计划的工作,为什么不使用Windows任务计划程序 我找到的一些信息可能有用:
Kris使用计时器,我仍然必须执行
ThreadPool.QueueUserWorkItem(o=>Work())代码>?不同之处在于我不再需要while(true)Thread.sleep?使用计时器,我仍然必须执行ThreadPool.QueueUserWorkItem(o=>Work())代码>?不同之处在于我不再需要while(true)Thread.sleep?使用计时器,我仍然必须执行ThreadPool.QueueUserWorkItem(o=>Work())代码>?区别在于我不再需要while(真的)Thread.sleep了?@Chuck,是的,你不需要这些东西。现在查看我的帖子,我已经编写了一些示例代码,这些代码完全符合您的要求,但是使用了计时器approach@Chuck,工作方法永远不会执行,因为程序会立即退出。程序退出后,将释放计时器对象并停止计时器线程。我编辑了这个程序-在“Worker.Start()”之后添加了Thread.Sleep(2000)。现在Work函数有足够的时间执行。使用计时器,我仍然必须执行ThreadPool.QueueUserWorkItem(o=>Work())代码>?区别在于我不再需要while(真的)Thread.sleep了?@Chuck,是的,你不需要这些东西。现在查看我的帖子,我已经编写了一些示例代码,这些代码完全符合您的要求,但是使用了计时器approach@Chuck,工作方法永远不会执行,因为程序会立即退出。程序退出后,将释放计时器对象并停止计时器线程。我编辑了这个程序-在“Worker.Start()”之后添加了Thread.Sleep(2000)。现在Work函数有足够的时间执行。