Web サービスが X 時間ごとにクリーンアップ ルーチンを呼び出すようにしたいと考えています。メソッドを呼び出してこのサービスを開始できることは理解していますが、ユーザーの操作はまったく必要ありません。このサービスを公開したいのですが、自動的に開始され、X 時間ごとにクリーンアップ プロセスが実行されます。
何か案は?
Web サービスが X 時間ごとにクリーンアップ ルーチンを呼び出すようにしたいと考えています。メソッドを呼び出してこのサービスを開始できることは理解していますが、ユーザーの操作はまったく必要ありません。このサービスを公開したいのですが、自動的に開始され、X 時間ごとにクリーンアップ プロセスが実行されます。
何か案は?
X 時間ごとにオフになるタイマーをGlobal.asax.cs
ファイルに設定するか、X 時間ごとにオフになるスケジュールされたタスクを作成して、クリーンアップ サービスをトリガーすることもできます。
プロジェクトにグローバル ファイルがない場合は、プロジェクトに追加するだけで簡単に追加できます。これを行うには、プロジェクトを右クリック -> [追加] -> [新しい項目] を選択し、表示されるダイアログで [グローバル アプリケーション クラス] を選択して [追加] をクリックします。次に、Application_Start
イベント内でタイマーを初期化してアクションを実行できます。
public class Global : System.Web.HttpApplication
{
private static System.Threading.Timer timer;
protected void Application_Start(object sender, EventArgs e)
{
var howLongTillTimerFirstGoesInMilliseconds = 1000;
var intervalBetweenTimerEventsInMilliseconds = 2000;
Global.timer = new Timer(
(s) => SomeFunc(),
null, // if you need to provide state to the function specify it here
howLongTillTimerFirstGoesInMilliseconds,
intervalBetweenTimerEventsInMilliseconds
);
}
private void SomeFunc()
{
// reoccurring task code
}
protected void Application_End(object sender, EventArgs e)
{
if(Global.timer != null)
Global.timer.Dispose();
}
}
グローバル ファイルの詳細については、MSDNを参照してください。