Dienste programmieren mit .NET

Dienste brauchen Threads

Threads sind nichts Besonderes, denn jedes Windows-Programm hat mindestens einen, und man muss sich beim Programmieren normalerweise nicht darum kümmern, dass es einen Thread gibt. Man geht einfach immer implizit davon aus, dass innerhalb eines Programms keine zwei Funktionen asynchron zueinander aufgerufen werden können. Alles wird immer nacheinander in nur einem Thread ausgeführt.

Komplizierter wird die Sache allerdings, wenn man mit mehreren Threads arbeitet. In einem solchen Fall kann es plötzlich passieren, dass eine Funktion, die das Resultat einer anderen Funktion erwartet, schon läuft, bevor die andere Funktion überhaupt beendet wurde. Das erschwert die Arbeit mit mehreren Threads erheblich und führt meist dazu, dass man die Verwendung paralleler Threads vermeidet - auch wenn es Anforderungen gibt, die nur mit multiplen Threads befriedigend zu lösen sind.

Bei der Programmierung von Diensten kommt man jedoch um multiple Threads nicht herum: Allerdings ist das hier nicht besonders kompliziert, denn effektiv gibt es nur einen Thread, der die Aufgabe des Dienstes erledigt. OnStart und OnStop kommen diesem Thread nicht in die Quere.

Ein Thread besteht im Wesentlichen aus einer Funktion, die beim Start des Threads aufgerufen wird. So lange sie nicht von selbst terminiert oder von außen beendet wird, läuft der Thread.