1

Windows サービス アプリケーションを作成するのはこれが初めてで、一定の間隔で複数のタスクを実行するためのさまざまなアプローチについて少し読んでいます。1 つは 1 日 1 回、もう 1 つは 1 分ごとです。

私が結論付けたのは、TimedCallBack と System.threating.timer タイマーを使用することでした。

エレガントではない例

private void DailyTask(object state) {
  //do something daily
}

private void IntervalTask(object state) {
  //do something else
}

private void OnStart() {
  TimedCallBack dailyTcb = DailyTask;
  TimedCallBack intervalTcb = IntervalTask;
  System.Threading.Timer dailyTimer = new Timer(dailyTcb, null, 0, 86400000);
  System.Threading.Timer intervalTimer = new Timer(intervalTcb, null, 0, 60000);
}

private void OnStop() {
  intervalTimer.Dispose();
  dailyTimer.Dispose();
}

質問

1) タイマーは、タスクの完了後に時計を開始しますか? 実行するたびに完了するのにある程度の時間がかかる場合、どれがゆっくりと 1 日を過ぎてしまうのでしょうか? マイナス 24 時間を実行するのにかかった時間を特定する必要があるとしたら、どちらを想定しますか?

2)これは、2 つの単純なタスクに対する完全に優れたアプローチです。

ありがとう

4

1 に答える 1

1

タイマーは、タスクの完了後まで待機せず、タイマーを再開します。たとえば、タイマーを 20 ミリ秒に設定し、コールバックの処理に 20 ミリ秒以上かかった場合、最初のティックが完了する前に別のティックが発生します。

あなたの考えに特に問題はないと思います。ただし、サービスがそれだけのことを行っている場合 (つまり、間隔ごとに 1 回起動するのを待っているだけ)、単純なコンソール モード プログラムにして、スケジュールされたタスクを使用して実行することを検討してください。Windows タスク スケジューラと schtasks コマンド ライン ツールを確認してください。

于 2012-12-29T01:45:01.340 に答える