1つ以上のバックグラウンドスレッドをホストできるWindowsサービスがあります。各バックグラウンドスレッドは、ポーリングループを開始して作業をチェックします。私はループを実装するために次のパターンを使用しています:
new Thread(DoWork).Start();
private void DoWork()
{
while(keepRunning)
{
Console.WriteLine(DateTime.Now);
Thread.Sleep(1000);
}
}
CPUの消費量が少ない代替品を見つけようとしています。再帰的な方法でタイマーを使用してポーリングループを実現することができました。
var timer = new Timer(WakeUp, null, Timeout.Infinite, 1000)
timer.Change(0, 1000);
private void WakeUp(object state)
{
lock (locker)
Monitor.Pulse(locker);
}
private void DoWork()
{
lock (locker)
{
if (!keepRunning) return;
Console.WriteLine(DateTime.Now);
Monitor.Wait(locker);
DoWork();
}
}
あるパターンを他のパターンよりも使用することに利点はありますか?バックグラウンドスレッドでポーリングループを設定するためのより良いパターンはありますか?