【发布时间】:2009-11-19 17:04:17
【问题描述】:
我正在维护一些看起来像这样的代码。这是一项 Windows 服务,每 30 分钟执行一次。 ActualWorkDoneHere 方法运行大约需要 30 秒,但如果在运行时停止它可能会使事情处于不良状态。防止这种情况发生的最好方法是什么?我应该用 onstop 方法中设置为 false 的布尔值替换 While(true)(删除线程 Abort 调用)吗?有什么方法可以判断线程是否处于休眠状态?
namespace WorkService
{
public partial class WorkService : ServiceBase
{
private Thread _workerThread = null;
public WorkService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_workerThread = new Thread(new ThreadStart(DoWork));
_workerThread.Start();
}
protected override void OnStop()
{
_workerThread.Abort();
}
static void DoWork()
{
int sleepMinutes = 30;
while (true)
{
ActualWorkDoneHere();
System.Threading.Thread.Sleep(new TimeSpan(0, sleepMinutes, 0));
}
}
}
}
【问题讨论】:
-
这看起来像是任务计划程序的工作! :)
-
@Greg 任务计划程序不是按计划运行吗?在这种情况下,Stimy 希望暂停 30 分钟然后再次运行,而不是每 30 分钟运行一次。
标签: c# .net windows-services