2009-02-03 5 views
47

Ich bin auf der Suche nach einer C# -Bibliothek, vorzugsweise Open Source, mit der ich Aufgaben mit einer gewissen Flexibilität einplanen kann. Insbesondere sollte ich in der Lage sein, Dinge zu planen, die alle N Zeiteinheiten ausgeführt werden, sowie "Jeden Wochentag zur XXXX Zeit" oder "Jeden Montag zur XXXX Zeit". Mehr Features als das wäre nett, aber nicht notwendig. Dies ist etwas, was ich in einer Azure WorkerRole verwenden möchte, die Windows geplante Aufgaben "at", "Cron" und alle Drittanbieter-Anwendungen, die eine Installation und/oder eine GUI für den Betrieb erfordern, sofort ausschließt. Ich suche eine Bibliothek.Ich empfehle eine C# Task Scheduling Bibliothek

+1

Überprüfen Sie die nativ verfügbar Azure Scheduler aus, im Jahr 2014 eingeführt - http://azure.microsoft.com/en-us/services/scheduler/ – mvark

Antwort

55

http://quartznet.sourceforge.net/

"Quartz.NET ist eine Portierung von sehr propular (sic!) Open Source Java Job-Scheduling-Rahmen, Quarz."

PS: Wort zu den Weisen, versuchen Sie nicht nur navigieren, wenn bei der Arbeit ;-)

+0

ist quartz.net verwendet Windows-Scheduler oder Timer für die Planung? –

+1

aber es unterstützt nicht async/erwarten out of the box. –

+1

Es hat einen schwerwiegenden Fehler, wenn Sie 20 Aufgaben und 5 Threads im Pool haben, führt es die ersten paar Aufgaben häufiger aus und die letzten Aufgaben werden nur einmal pro paar Minuten statt einmal alle 15 Sekunden ausgeführt, wie ich gefragt habe. Und als @ Michael-Sync erwähnt, unterstützt es nicht async/erwarten. –

3

Quarz scheint eine nette Lösung zu sein.

Ich habe kürzlich (dieses Jahr) einen benutzerdefinierten Taskplaner für ein großes Projekt schreiben müssen, an dem ich gerade arbeitete. Auch sie konnten den Windows-Taskplaner nicht verwenden und wollten außerdem benutzerdefinierte Funktionen ausführen, indem sie Assemblys hochladen (über eine ASP.net-Website) und den Service zum angegebenen Zeitpunkt ausführen ließen.

Die Sache war ehrlich gesagt ein bisschen ein Albtraum (nicht so sehr zu entwerfen und zu implementieren, aber die Planungslogik war ein bisschen ein Widerstand).

Ich würde empfehlen, alle anderen Möglichkeiten zu erschöpfen, bevor Sie sich entscheiden, "rollen Sie Ihre eigenen" (a.k.a neu erfinden das Rad!).

7

Ich benutzte Quarz in meinen Java-Tagen und es funktionierte großartig. Ich benutze es jetzt für einige .Net-Arbeiten und es funktioniert sogar noch besser (natürlich gibt es eine Reihe von Jahren, um es zu stabilisieren). Daher stimme ich die Empfehlungen dafür unbedingt zu.

Eine weitere interessante Sache, die Sie betrachten sollten, dass ich gerade angefangen habe zu spielen, ist das neue System.Threading.Tasks in .Net 4.0. Ich habe gerade die Aufgaben für die Parallelisierung der Arbeit verwendet, und es nutzt große Vorteile von Multi-Cores/Prozessoren. Ich habe bemerkt, dass es dort eine Klasse mit dem Namen TaskScheduler gibt, ich habe es nicht im Detail betrachtet, aber es hat Methoden wie QueueTask, DeQueTask, usw. Kann zumindest eine Untersuchung wert sein.

1

Es gibt einen neuen Cloud-basierten Scheduler von Aditi Technologies namens Scheduler.

Planer ermöglicht es Entwicklern, die Ausführung von Aufgaben über HTTP-Webhooks zu planen, die mit einfachen oder komplexen CRON-Zeitplänen ausgeführt werden.