-1

ここに私が目指しているものの概要があります:

開始時に、そのサーバー上の特定のデータベースで使用可能なキューをチェックする Windows サービスがあります。キューが見つかった場合は、処理を開始する必要があります (非常に単純で簡単です)。キューが見つからない場合は、サービスが 15 分間「スリープ」してから「再起動」する必要があります。キューが見つかった場合は、処理を開始します。それ以外の場合は、さらに 15 分間スリープしてから「再起動」します。

どうすればこれを行うことができますか?System.Threading.Sleep メソッドを見てきましたが、明らかにコーディングが非常に貧弱です。スレッドをスリープすると、連続するメソッドの実行がブロックされることを理解しています。これは問題ありません。スリープの後、サービスは同じメソッドを呼び出して処理を「再開」します。

System.Threading.Timer も調べましたが、システムがサービスを完全に停止することがあります。イベント ビューアーには何らかの例外に関連するエラーがいくつかありますが、サービスを手動で開始すると、キューの処理が自動的に開始されます。これは、コーディングに問題がないことを示しています。

サービス スレッドを 15 分間中断してから、処理メソッドを再度呼び出す最善の方法は何ですか。利用可能なキューを継続的にチェックするループにとどまる必要があります。見つかったら処理を行い、何も見つからない場合は 15 分間スリープしますか?

4

1 に答える 1

0

本当に眠りたい場合は、 を呼び出すだけですThread.Sleep。最も基本的な用語では、スレッドのメイン実行ループは次のようになります。

while (true)
{
    if (!queue.processItem())
        Thread.Sleep(...);
}

Thread.Sleepメイン サービス スレッドで呼び出すべきではありません。バックグラウンド スレッドで呼び出します。そのため、メイン サービス スレッドは存続し、サービス メッセージを処理する準備ができているという考え方です。そして、バックグラウンド スレッドが実際の作業を行います。

そして、はい、睡眠は一般的に避けるべきものです. 理想的には、空の場合に待機できるブロッキング キューが必要です。そして、アイテムがキューに追加されると、スレッドが起動します。

于 2013-02-26T09:06:16.180 に答える