12

バックグラウンド スレッドを生成する HttpModule を作成しました。インプロセスで実行されるスケジュールされたタスクのようなスレッドを使用していますが、これは非常に便利です。

このスレッドを追跡するためのベスト プラクティスは何ですか? 私はこれまでにこれをやったことがなく、そのいくつかの側面について少し混乱しています:

  1. スレッドがまだ実行されているかどうかを確認するにはどうすればよいですか? 私はそれが仕事をしているのを見ますが、それがまだ生きているかどうかを知る別の方法はありますか? ProcMon をダウンロードしましたが、w3wp.exe が大量のスレッドを生成するため、どのスレッドが自分のスレッドかわかりませんでした。私はそれに名前を付けましたが、それは役に立ちませんでした。

  2. スレッドが死んだ場合、スレッドを「キャッチ」するにはどうすればよいですか? 失敗した場合に EventLog または何かに書き込むことができる Dispose メソッドはありますか? 「死亡宣告」か何か?

  3. スレッドをアクティブに停止するにはどうすればよいですか? このバックグラウンド プロセスの実行を停止したい場合、IIS をバウンスせずに強制終了するにはどうすればよいですか?

  4. HttpModule とは別に、もう一度開始する方法はありますか? (これに対する答えはノーだと思います...)

編集:明確にするために、意図は私のスレッドが消えないようにすることです。関数を実行した後、数分間スリープ状態になり、ウェイクアップして関数を再度実行します。1 つのタスクを実行して終了するようなものではありません。

4

2 に答える 2

10

Jeff が Stackoverflow を作成したとき、同様の問題がありました。

彼の解決策は、キャッシュの有効期限を使用することでした。何かをキャッシュに入れて、有効期限が切れると、ユーザーに面していないスレッドでイベントが発生します。有効期限のイベント ハンドラーで、項目をキャッシュに再度追加し、アプリケーションに必要なハウスキーピング作業を行うコードを挿入します。

この手法を使用すると、サブ質問に簡単に回答できます。

  1. アイテムがまだキャッシュにあることを確認します。
  2. アイテムがキャッシュにない場合は、再度追加します。
  3. キャッシュからキャッシュ アイテムを削除します。
  4. アイテムをキャッシュに追加します。

これらのオプションを構成するための小さな管理ページを作成できます。

これにより、Web アプリケーションのハウスキーピング プロセスを大まかに計る良い方法が得られます。個別の Windows サービスは必要ありません。これは大きなメリットです。

于 2009-03-17T17:27:06.553 に答える