Implementar correctamente el proceso en segundo plano Thread en ASP.NET
Necesito ejecutar un bucle while infinito y quiero iniciar la ejecución englobal.asax
. Mi pregunta es ¿cómo debo hacerlo? ¿Debo comenzar un nuevo tema o debo usar Async and Task o cualquier otra cosa? Dentro del bucle while necesito hacerawait TaskEx.Delay(5000);
¿Cómo hago esto para que no bloquee ningún otro proceso y no cree pérdidas de memoria?
Yo uso VS10, AsyncCTP3, MVC4
EDITAR:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
Todo lo que necesito hacer es ejecutar esto como una instancia de singleton a nivel mundial siempre que la aplicación esté disponible.
EDITAR: SOLUCIONADO
Esta es la solución final en Global.asax
protected void Application_Start()
{
Thread signalRConnectionRecovery = new Thread(SignalRConnectionRecovery);
signalRConnectionRecovery.IsBackground = true;
signalRConnectionRecovery.Start();
Application["SignalRConnectionRecovery"] = signalRConnectionRecovery;
}
protected void Application_End()
{
try
{
Thread signalRConnectionRecovery = (Thread)Application["SignalRConnectionRecovery"];
if (signalRConnectionRecovery != null && signalRConnectionRecovery.IsAlive)
{
signalRConnectionRecovery.Abort();
}
}
catch
{
///
}
}
Encontré este buen artículo sobre cómo usar async worker:http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
Y esto:http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
Pero creo que para mis necesidades este será perfecto:http://forums.asp.net/t/1433665.aspx/1