views:

7262

answers:

6

I'm looking for a C# library, preferably open source, that will let me schedule tasks with a fair amount of flexibility. Specifically, I should be able to schedule things to run every N units of time as well as "Every weekday at XXXX time" or "Every Monday at XXXX time". More features than that would be nice, but not necessary. This is something I want to use in an Azure WorkerRole, which immediately rules out Windows Scheduled Tasks, "at", "Cron", and any third party app that requires installation and/or a GUI to operate. I'm looking for a library.

+1  A: 

See A New Task Scheduler Class Library for .NET on Codeproject.

Galwegian
+11  A: 

http://quartznet.sourceforge.net/

"Quartz.NET is a port of very propular(sic!) open source Java job scheduling framework, Quartz."

PS: Word to the wise, don't try to just navigate to quartz.net when at work ;-)

Tiberiu Ana
A: 

I read about Quartz (http://quartznet.sourceforge.net/) in stackoverflow question (http://stackoverflow.com/questions/503564/c-service-perform-daily-task). It's a C# library and allows for flexible scheduling.

Tundey
A: 

Quartz seems like a nice solution.

I've recently (this year) had to write a custom task scheduler on a major project I was working on. They too could not use the Windows Task Scheduler, and also wanted the ability to execute custom functionality by virtue of uploading assemblies (via an ASP.net website) and have the service execute the appropriate task at the specified time.

The thing was honestly a bit of a nightmare (not so much to design and implement, but the scheduling logic was a bit of a drag).

I'd highly recommend exhausting all other avenues beforre deciding to "roll your own" (a.k.a reinvent the wheel!).

RobS
A: 

Quartz is buggy, don't waste your time.

anvimi
A: 

I used Quartz back in my Java days and it worked great. I am now using it for some .Net work and it works even better (of course there are a number of years in there for it to have stabalized). So I certainly second the recommendations for it.

Another interesting thing you should look at, that I have just begun to play with is the new System.Threading.Tasks in .Net 4.0. I've just been using the tasks for parallelizing work and it takes great advantage of multi cores/processors. I noticed that there is a class in there named TaskScheduler, I haven't looked at it in detail, but it has methods like QueueTask, DeQueTask, etc. Might be worth some investigation at least.

MikeD