ウィンドウサービスを書いています。1日に1回実行する一連のタスクがあります。タスクのいくつかのセットは、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 日に 1 回実行しなければならないタスク、または 1 分ごとに鼓動するようなタスク。そのためのタイマーを作成して開始しました。これらは他のものとは独立しているためです。しかし、それから主な実行部分。実行するクエリは 2 種類あります。1) 間隔ごとに 5 分と言い、その他は 72 時間ごとに間隔を置きます。一度に実行できるのは 1 回だけです。2)5分後など、特定の時間間隔で設定を更新する必要があります.30分後に1回、60分後に他の2つの設定を更新する必要があります。
現在、サービスの開始/停止が影響を受けず、スケーラビリティとパフォーマンスに従ってすべてが完璧に設計されるように、適切に配置するのが難しいと感じていますか?
あなたの意見を共有してください。私の質問が適切に組み立てられていることを願っています。
ありがとう