Correr procesos .Net en background tiene sus riesgos (remito a la siguiente dirección en la que se analizan más detalladamente estos problemas peligros de los procesos background en .NET ). En resumen lo que dice el articulo es que:
- Una excepción no tratada en un hilo no asociado a una petición hará caer el proceso en background.
- Si ejecutas el sitio en una granja de servidores, se puede acabar con multiples instancias de tu aplicación, todas intentando ejecutar la misma tarea en el mismo tiempo
- El AppDomain que ejecuta tu sitio se puede caer por múltiples razones y esto interrumpirá definitivamente la tarea en background con ello
- Hangfire u otras librerías opensource: usado para escribir tareas en background en un website en ASP.NET
- Cloud: Azure WebJobs: una característica de Azure usada para ejecutar tareas en background fuera del website
- Advanced: Azure Worker Role en un Servicio en la nube: para escalar carga de procesos en background independientemente del Website
Hangfire es un framework que está muy bien documentado. Esta soportado por SQL Server, SQL Azure, MSQM o RabbitMQ. Una de las mejores características es el dsahborad que incluye y que muestra todos los trabajos programados, en ejecución, que han terminado con éxito o que han producido algún error
En Hangfire es posible encolar trabajos fácilmente y se apoya en colas persistentes
BackgroundJob.Enqueue(() => Console.WriteLine(
"Fire-and-forget"
));
Se pueden retrasar
BackgroundJob.Schedule(() => Console.WriteLine(
"Delayed"
), TimeSpan.FromDays(1));
RecurringJob.AddOrUpdate(() => Console.Write(
"Recurring"
), Cron.Daily);
Aquí les dejo un tutorial para profundizar más tutorial hangfire
No hay comentarios:
Publicar un comentario