runworkerasync - Mejor implementación del servicio de fondo ASP.NET
c backgroundworker (3)
Bueno, en lugar de un ''Simple Thread'', irías por un ThreadPool.
Y si fuera yo, lo ejecutaría en un Servicio de Windows y me comunicaría a través de MSMQ.
¿Cuál es la mejor implementación para más de un servicio en segundo plano en una aplicación ASP.NET?
Retrollamada del temporizador
Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
Thread o ThreadPool
Thread thread = new Thread(Work); thread.IsBackground = true; thread.Start();
BackgroundWorker
BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(DoMyWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); worker.RunWorkerAsync();
Almacenamiento en caché como http://www.codeproject.com/KB/aspnet/ASPNETService.aspx (ubicado en la publicación de Jeff Atwood aquí )
Necesito ejecutar múltiples "servicios" de fondo en un momento dado. Un servicio puede ejecutarse cada 5 minutos, donde otro puede ser una vez al día. Nunca serán más de 10 servicios en ejecución a la vez.
Debe implementar algunos estados de tareas. Después de que la aplicación recicla el servicio en segundo plano, debe reparar las tareas rotas. Si las tareas están en transacciones, entonces no habrá problemas con ese comportamiento.
Ninguna de las sugerencias del póster original se adapta a más de un servidor.
Quiero lo mismo: una forma robusta y simple de programar tareas de fondo regulares y realizar un procesamiento pesado ad-hoc (reconstruir cachés y demás) sin afectar la solicitud actual de los usuarios.
Quiero que las tareas se ejecuten en el contexto de las aplicaciones web para a) obtener la configuración de web.config (evitar la duplicación de la configuración) y b) implementarla con la aplicación web (implementación sencilla). Y necesito que funcione para sitios web extendidos a más de un servidor.
Solo encontré uno que proporciona algo de lo que quiero:
(1) Cree una página .aspx para cada tarea y configure una tarea programada de wget en un servidor separado que llame a este .aspx en el sitio web. He implementado este enfoque y funciona, pero no me gusta al 100%, debido a la dependencia de tareas programadas y no me da la capacidad de realizar tareas pesadas ad hoc en el fondo