我正在写一个窗口服务。我有一套任务要每天执行一次。有些任务应该在经过5分钟的时间间隔后执行。最后一些任务应该在72小时的时间间隔之后执行。
与此同时,我需要在特定时间间隔刷新一些设置。
我发现正确设计它有点问题。这是我的设计。
public void StartController()
{
try
{
readSettings();
startDetectionAndPost(); //once a day
LogUtil.WriteLog(LogLevel.INFO, "starting bootstrap");
bootStrap(); //based on time interval elapsed
LogUtil.WriteLog(LogLevel.INFO, "starting heartbeat of agent");
startHeartBeat(); //after a time interval say 1 min
LogUtil.WriteLog(LogLevel.INFO, "start fetching ADSI info");
startInfoTimer();
while (true)
{
if (!IsRunning)
{
engine.StopExecution();
break;
}
//here got to change this as per threading model.
while (_threadMonitor.CurrentThreadCount >= MAX_JOB_COUNT)
{
if (!IsRunning)
{
engine.StopExecution();
LogUtil.WriteLog(LogLevel.INFO, "query execution stopped");
break;
}
//otherwise sleep
Thread.Sleep(100);
}
_executionThread = new Thread(new ThreadStart(engine.StartExecution));
_threadMonitor.IncrementThread();
_executionThread.Start();
//if user gone stop service it will timeout issue.
Thread.Sleep(new TimeSpan(0, 0, 1));//_agentCache.DomainSweepInterval));
}
}
catch (Exception ex)
{
LogUtil.WriteLog(LogLevel.ERROR, "could not process."+ex.Message,ex);
//log exception and what to do next.
}
}
我必须每天执行一次任务,或者每分钟后执行一次心跳。我为此创建了计时器并启动它,因为这些东西是独立于其他东西的。但后来主要执行部分。我有两种类型的查询要执行。 1)每隔一段时间后说5分钟,每隔72小时后再进行一次间隔。一次只能执行一次。 2)我必须在给定时间间隔刷新我的设置,比如在5分钟之后,我必须刷新其他两个设置,比如30分钟后再说一次,60分钟后其他设置。
现在我发现很难正确安排它,这样我的服务启动/停止就不会受到影响,所有内容都应该按照可扩展性和性能进行完美设计?
请分享您的观点,我希望我的问题能够正确构建。
由于
答案 0 :(得分:0)
首先,我同意Task Scheduler有其问题。我之前不得不写下其中的一个,但我从头开始,我会看看这个项目。
http://taskschedulerengine.codeplex.com/
这使您可以在其他开发人员的支持下攀登,您可以专注于实际的业务问题。此外,如果您找到想要添加的内容,您可以回馈社区