Mit dem Code zu lösen, ich einen eigenen Threadpool umgesetzt: http://www.developer.com/net/article.php/3783756Wie dieses spezielle Threading-Problem aus dem folgenden Artikel
Dies ist, was ich erreichen möchte: durch einen Timer ausgelöst, sollte ein Dienst eine Datenbank abfragen alle 5 Sekunden für die Ausführung neuer Jobs. Ein Job ist im Grunde nur die Information über ein Kommandozeilenprogramm, das mit Argumenten ausgeführt werden muss.
Bis zu 50 oder mehr dieser Programme sollten gleichzeitig ausgeführt werden können. Ein Programm kann ein paar Sekunden, Minuten und auch Stunden dauern. Der Dienst muss zu jeder Zeit die Kontrolle über diese Programme haben, d. H. Er muss in der Lage sein, auf Anforderung zum Beispiel ein Programm zu beenden.
Mit der ThreadPool-Implementierung von oben begann ich, die auszuführenden Programme in die Warteschlange zu stellen und konnte sehen, wann der Dienst sie tatsächlich ausführte. Kein Problem bis jetzt. Der Mechanismus funktioniert hier jedoch wie folgt:
Der ThreadPool erstellt einen Arbeitsfaden und startet ihn. Immer wenn ein Programm in die Warteschlange gestellt wird, merkt dies der Werkerthread und ruft einen Delegaten auf, der im Wesentlichen ein System.Diagnostics.Process-Objekt instanziiert und das externe Programm startet. Der Thread ist dann mit seiner Arbeit fertig und könnte weitere Programme starten. Wenn jedoch kein Programm gestartet wird, veranlasst ein Leerlauftimer den Threadmanager, den Thread zu beenden und somit den gestarteten Prozess zu unterbrechen.
Das ist nicht was ich brauche. Hat jemand hier eine Idee, wie man mit dem beschriebenen Szenario besser umgeht?
Hm. Es war eigentlich eine Anfrage des Kunden, mit Threads zu arbeiten (was er auch getan hat und jetzt von uns in .NET möchte). Nun, da ich einige Erfahrungen mit dieser "lausigen" Threadpool-Implementierung gemacht habe, ist mir aufgefallen, dass es keinen Sinn ergibt. Da das Starten eines externen Programms bereits neue Threads erzeugt, die parallel ausgeführt werden. Es scheint wirklich so, als ob eine Sammlung, die die Prozesse verwaltet, sich richtig anfühlt ... – Mephisztoe