Код: Выделить всё
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);
}
}
Код: Выделить всё
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