Wie zu stoppen worker-threads in einer Multithread-Windows-Dienst auf Dienst stoppen

Ich habe einen Windows-Dienst, nutzt die producer/consumer-Warteschlange Modell mit mehreren worker-threads, die Verarbeitung von tasks aus einer Warteschlange. Diese Aufgaben können sehr lange laufen, in der Reihenfolge von vielen Minuten wenn nicht Stunden, und nicht mit Schleifen.

Meine Frage ist, über die beste Art das zu handhaben, den service zu stoppen zu anmutig-end-Verarbeitung auf diese worker-threads. Ich habe gelesen, in einem anderen ALSO Frage, dass die Verwendung von thread.Abort() wird ein Zeichen für schlechtes design, aber es scheint, dass der service OnStop () - Methode wird nur eine begrenzte Menge an Zeit, um zu beenden, bevor der Dienst beendet wird. Ich tun kann, ausreichend clean-up in die Fänge zum "ThreadAbortException" - (es gibt keine Gefahr von inkonsistenten Zustand), so aufrufenden thread.Abort() auf den worker-threads scheint OK zu mir. Ist es? Was sind die alternativen?

  • eine endgültige Lösung mit source code-Beispiel?
InformationsquelleAutor Rob West | 2009-04-01
Schreibe einen Kommentar