C# - Usando o FluentScheduler
Hoje vou apresentar o FluentScheduler um agendador de tarefas automatizado com interface fluente para a plataforma .NET. |
O FluentScheduler pode ser um recurso interessante para agendar tarefas de forma automática na plataforma .NET. Isso abre a possibilidade de usá-lo no lugar de um windows service.
A documentação oficial pode ser consultada neste link: https://github.com/fluentscheduler/FluentScheduler
A primeira coisa a fazer em seu projeto para usar este recurso é incluir uma referência à biblioteca FluentScheduler. Isso pode ser feito via pacote Nuget: FluentScheduler 5.3.0 - NuGet Gallery
Após isso, para começar a usar basta definir a configuração do job em uma classe Registry.
Nota: Um job é uma Action ou uma classe que herda de IJob
Com o registro pronto, você precisará definir o agendamento e inicializar o JobManager. Isso geralmente é feito assim que o aplicativo é carregado (no método Application_Start de um aplicativo Web, no método Main de um Console, etc.).
Vamos ao código...
Crie um projeto Console do tipo .NET Core chamado Cshp_FluentScheduler;
Inclua uma referência no projeto à biblioteca FluentScheduler.
No projeto vamos criar uma classe chamada RegistroTarefasAgendadas onde vamos definir o agendamento das tarefas que desejamos executar.
public class
RegistroTarefasAgendadas : Registry { public RegistroTarefasAgendadas() { Schedule<MeuJob>() .NonReentrant() // Permite somente uma instância do job por vez .ToRunOnceAt(DateTime.Now.AddSeconds(2)) // Aguarda 2 segundos .AndEvery(5).Seconds(); // Intervalo de 5 segundos
// Agenda um job para ser executado em uma hora e
dia específico |
Esta classe herda da classe Registry e nela usamos o método Schedule que permite agendar um job no registro.
A seguir definimos um comportamento específico para o nosso job:
No exemplo o job terá somente uma instância, vai aguardar 2 segundos para iniciar e vai ser executando a cada 5 segundos.
A seguir definimos o agendamento de outro job para ser executado todo o dia em uma hora específica. Aqui estamos executando diretamente o job.
Schedule(() => Console.WriteLine("Agora são 9:15, dia 9 de fevereiro ")).ToRunEvery(1).Days().At(9, 15);
Agora temos que criar a classe MeuJob onde vamos definir as tarefas a serem executadas:
public class MeuJob : IJob
{
public void Execute()
{
// Executa as tarefas agendadas
Console.WriteLine("São {0:HH:mm:ss} horas" , DateTime.Now);
}
}
|
Esta classe implementa o método Execute da interface IJob.
Para concluir abra o arquivo Program e no método Main() vamos inicializar o job usando a classe JobManager.
Após encerrar o programa estamos parando o Agendador que iniciamos.
static void Main(string[] args)
{
// Inicia o Agendador
// Define instância do Registro
JobManager.Initialize(new RegistroTarefasAgendadas());
// Aguarda pela intervenção do usuário
Console.WriteLine("Tecle algo...");
Console.ReadLine();
// Para o Agendador
JobManager.StopAndBlock();
}
|
Executando o projeto iremos obter o resultado abaixo:
Note a execução da primeira tarefa agendada a cada 5 segundos, e, às 9:31 a execução da segunda tarefa.
Esse foi um exemplo básico de uso da ferramenta. Consultando a documentação você terá outras possibilidades.
Pegue o projeto completo aqui: Cshp_FluentScheduler.zip
"Portanto, não
te envergonhes do testemunho de nosso Senhor, nem de mim, que sou prisioneiro
seu; antes participa das aflições do evangelho segundo o poder de Deus,
Que nos salvou, e chamou com uma santa vocação; não segundo as nossas obras, mas
segundo o seu próprio propósito e graça que nos foi dada em Cristo Jesus antes
dos tempos dos séculos;"
2 Timóteo 1:8,9
Referências:
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Criando um serviço do Windows - Macoratti
C# - Criando serviços para Windows com o TopShelf - Macoratti
C# - Tratando com serviços do Windows - Macoratti.net
Parando, Iniciando e Reiniciando os serviços do ... - Macoratti