2011-01-14 28 views
2

Ich habe einen Windows-Dienst, der einen Job asynchron alle paar Minuten ausführt, manchmal der Windows-Dienst ausgeführt und der vorherige Auftrag wurde nicht beendet, mit Threading gibt es eine Möglichkeit, den neuen Job, wenn der vorherige man ist nicht fertig, so dass es anfängt zu laufen, wenn der erste Job beendet ist?Warteschlange Ausführung von Threads in C#

+1

Hört sich an, als müssten Sie vorsichtig sein, um keinen unendlich wachsenden Auftragsbestand zu bekommen, wenn sie schneller in die Warteschlange gestellt werden, als sie abschließen können. Stellen Sie sicher, dass eine maximale Anzahl an Warteschlangen vorhanden ist (z. B. nur eine!) Oder nehmen Sie einfach den einfachen Ausweg und verhindern Sie, dass ein neuer Job gestartet wird, wenn ein alter vorhanden ist. –

Antwort

5

Sie könnten Ihre eigene Producer/Consumer-Warteschlange von Jobs erstellen - effektiv einen Single-Thread-Threadpool.

Dies ist einfach in .NET 4 mit BlockingCollection<T>; vor dann ist es ein wenig trickier, aber nicht auch schlecht.

+0

Leider verwende ich 3.5 hast du einen Link zu einem Beispiel in 3.5? Danke – ryudice

+0

@ryudice: Es gibt einige Beispielcode hier: http://stackoverflow.com/questions/530211/creating-a-blocking-queuet-in-net/530228#530228 –

+0

@Jon: Mit 3.5 sollte das OP Task verwenden Parallel Lib, überprüfen 'cancelToken.IsCancellationRequested' und speichern Aufgabe in Warteschlange oder Liste ist die Aufgabe derzeit beschäftigt? – IAbstract

0

müssen Sie die Warteschlange im Hauptsteuerungsdienst implementieren. über den Abschluss des Threads und/oder periodisch können Sie Warteschlange überprüfen und nächste Aufgabe starten.

Verwandte Themen