1

ウィンドウサービスを書いています。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つの設定を更新する必要があります。

現在、サービスの開始/停止が影響を受けず、スケーラビリティとパフォーマンスに従ってすべてが完璧に設計されるように、適切に配置するのが難しいと感じていますか?

あなたの意見を共有してください。私の質問が適切に組み立てられていることを願っています。

ありがとう

4

1 に答える 1

0

まず、タスク スケジューラに問題があることに同意します。以前にこれらのいずれかを作成する必要がありましたが、ゼロから始めた場合は、このプロジェクトを検討します。

http://taskschedulerengine.codeplex.com/

これにより、他の開発者の後ろに乗ることができ、実際のビジネスの問題に集中できます。また、追加したいものを見つけた場合は、コミュニティに還元できます

于 2012-05-13T13:34:49.543 に答える