Я пытаюсь создать службу Windows, которая каждые 5 минут опрашивает систему и проверяет наличие необходимых действий. Я прочитал WaitHandles
и их полезность в этой области, но мне нужно понять, как это работает.
См. Код ниже:
public partial class PollingService : ServiceBase
{
private CancellationTokenSource cancelToken = new CancellationTokenSource();
private Task mainTask = null;
public PollingService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
mainTask = new Task(pollInterval, cancelToken.Token, TaskCreationOptions.LongRunning);
mainTask.Start();
}
public void pollInterval()
{
CancellationToken cancel = cancelToken.Token;
TimeSpan interval = TimeSpan.FromMinutes(5);
while (!cancel.IsCancellationRequested && !cancel.WaitHandle.WaitOne(interval))
{
if (cancel.IsCancellationRequested)
{
break;
}
EventLog.WriteEntry("*-HEY MAN I'M POLLNG HERE!!-*");
//Polling code goes here. Checks periodically IsCancellationRequested
}
}
protected override void OnStop()
{
cancelToken.Cancel();
mainTask.Wait();
}
}
Приведенный выше код кажется чем-то, что должно сработать на основании моих исследований, но я не понимаю, что такое !cancel.WaitHandle.WaitOne(interval)
. Как это поддерживает цикл с ожиданием каждые пять минут? Мне нужно понять эту часть кода, чтобы завершить мой сценарий или узнать, ошибаюсь ли я в использовании WaitHandle.
Именно здесь у меня возникла идея: Создание службы Windows c # для опросить базу данных