Обычная практика опроса внутри служб WindowsC#

Место общения программистов C#
Anonymous
Обычная практика опроса внутри служб Windows

Сообщение Anonymous »

Обычно советуют использовать что-то вроде этого (используя таймауты):

Код: Выделить всё

Thread workerThread = null;
AutoResetEvent finishedEvent = new AutoResetEvent(false);

protected override void OnStart(string[] args) {
this.finishedEvent.Reset();
this.workerThread = new Thread(this.Poll);
this.workerThread.Start();
}

protected override void OnStop() {
this.finishedEvent.Set();
if(!this.workerThread.Join(2000)) {
this.RequestAdditionalTime(5000);
}
}
где функция Poll определена следующим образом:

Код: Выделить всё

private void Poll() {
try {
var timeout = Int32.Parse(ConfigurationManager.AppSettings["pollingTimeout"]);
while(!this.finishedEvent.WaitOne(timeout, false)) {
// do polling
}
}
catch(Exception ex) {
Logger.Log.Fatal(ex);
throw;
}
}
  • Эти конструкции по существу равны:

    Код: Выделить всё

    while(!this.finishedEvent.WaitOne(0, false))
    и

    Код: Выделить всё

    while(true)
    без завершения события?
  • Я читал, что тайм-ауты используются для уменьшения загрузки процессора. Является ли использование опроса без таймаутов плохим выбором?


Подробнее здесь: https://stackoverflow.com/questions/330 ... s-services

Вернуться в «C#»