7

Jun

ScheduledTaskManager – un semplice schedulatore per i propri servizi

Ciao a tutti

Se vi è capitato di scrivere del codice da eseguire a intervalli regolari, avrete sicuramente impiegato molto tempo con timer, thread, e cose simili nel tentativo di creare qualcosa di funzionale e configurabile e come piace sempre a noi sviluppatori, riutilizzabile

 

Ho creato uno schedulatore impiegabile in vari ambiti, come ad esempio i Worker Role di Windows Azure, o Windows Service personalizzati, etc, che metto a disposizione di tutti

In questo schedulatore, è possibile registrare le operazioni da eseguire a intervalli regolari (ogni minuto di tutte le ore del giorno, o ogni ora e minuto di tutti i giorni) o in modalità ciclica con un intervallo specificato (minuti o ore e minuti)

 

Il codice di esempio di utilizzo è assolutamente semplice anche se usa le lambda expressions (C#, VB)

 

var m = new ScheduledTaskManager();

m.RegisterSlidingTask(() =>
    Console.WriteLine("{0} ciao", DateTime.Now), 1, true);

m.RegisterAbsoluteTask(() =>
    Console.WriteLine("{0} absolute ciao", DateTime.Now), DateTime.Now.Minute + 1, true);

Console.ReadLine();

 

l’esempio è in C# ma non credo serva la traduzione

 

potete notare che ho lanciato una prima esecuzione ciclica (sliding) con intervallo di 1 minuto, in modalità asincrona (il true alla fine della chiamata). questo garantisce che il timer continui a girare senza saltare gli intervalli di tempo, mentre l’esecuzione richiesta avviene su un altro thread del thread-pool

 

di seguito, c’è la registrazione di un task assoluto con specificato il minuto successivo a quello attuale. questo verrà eseguito ad ogni minuto uguale delle varie ore della giornata, e l’esecuzione anche in questo caso è in asincrono

 

è possibile non richiede l’uso dell’esecuzione asincrona se ad esempio i vari task possano incorrere in problemi di lock o race o semplicemente non si vuole che vengano eseguiti contemporaneamente

 

esistono altri overload di questi 2 metodi che consentono una buona configurabilità

 

è sempre possibile comunque personalizzare il codice con le proprie necessità

l’esempio completo da scaricare con la libreria + una demo funzionante è su MSDN

 

saluti

by Antonio Esposito on 6/7/2012