fluentscheduler

Crea tareas periódicas en C# con FluentScheduler

FluentScheduler es una biblioteca para .NET que permite la creación de tareas en una frecuencia especificada usando una sintaxis Fluent.

A veces tenemos que hacer, en algunos programas, que cierta tarea se ejecute en algunos momentos. Por ejemplo, que recargue datos cada 15 min, que ejecute una tarea a las 8:00am, que los sábados haga tal acción.

En general, es un código bastante aburrido de hacer, y propenso a fallos. Aquí es donde entra en juego FluentScheduler, permitiéndonos definir este tipo de tareas, de forma sencilla.

La verdad que la sintaxis es una auténtica maravilla. Dispone de un montón de métodos de extensión para personalizar nuestras necesidades, usando una sintaxis “Fluent”.

Es una biblioteca muy útil para la automatización asíncrona de tareas en aplicaciones .NET .

Cómo usar FluentScheduler

Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.

Install-Package FluentScheduler

Ahora, su uso más sencillo sería el siguiente,

using FluentScheduler;

JobManager.Initialize();

JobManager.AddJob(
    () => Console.WriteLine("5 minutes just passed."),
    s => s.ToRunEvery(5).Minutes()
);

 JobManager.JobEnd += (info) => Logger.Information(
	info.Duration > TimeSpan.FromSeconds(1) ?
	$"{info.Name}: ended ({info.Duration})" :
	$"{info.Name}: ended"
);

En casos más complejos, podemos definir una clase con la configuración que queramos,

using FluentScheduler;

public class MyRegistry : Registry
{
    public MyRegistry()
    {
            Schedule(() => Console.WriteLine("Cada 2 segundos ")).ToRunNow().AndEvery(2).Seconds();

        Schedule<MyJob>(() => Console.WriteLine("Han pasado 5 segundos")).ToRunOnceIn(5).Seconds();

        Schedule(() => Console.WriteLine("Son las 9:15 PM")).ToRunEvery(1).Days().At(21, 15);
        
        Schedule(() => Console.WriteLine("Son las 3:00 am del primer lunes del mes PM")).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);
}

Y ejecutarlo en el JobManager

JobManager.Initialize(new MyRegistry());

Adicionalmente, podemos ejecutar acciones cuando se inicia o finaliza un Job, o si se produce una excepción.

JobManager.JobException += info => Logger.Error("An error just happened with a scheduled job: " + info.Exception);
You can also listen for jobs start and end:

JobManager.JobStart += info => Logger.Information($"{info.Name}: started");
JobManager.JobEnd += info => Logger.Information($"{info.Name}: ended ({info.Duration})");

FluentScheduler es Open Source, y todo el código y documentación está disponible en la página del proyecto https://fluentscheduler.github.io/ y en su repositorio https://github.com/fluentscheduler/FluentScheduler