Necesito ejecutar un ciclo while infinito y quiero iniciar la ejecución en global.asax
. Mi pregunta es ¿exactamente cómo debería hacerlo? ¿Debo comenzar un nuevo Tema o debería usar Async y Tarea o cualquier otra cosa? Dentro del ciclo while necesito hacerlo await TaskEx.Delay(5000);
Implementar correctamente el proceso de fondo Subproceso en ASP.NET
¿Cómo hago esto para que no bloquee ningún otro proceso y no cree pérdidas de memoria?
utilizo VS10, AsyncCTP3, MVC4
EDIT:
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 singleton a nivel mundial, siempre y cuando la aplicación está disponible.
EDIT: SOLUCIONADO
Ésta 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
{
///
}
}
he encontrado este fantástico artículo sobre cómo utilizar asíncrono trabajador: 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 mi necesidad s éste será perfecto: http://forums.asp.net/t/1433665.aspx/1
¿Qué está tratando de hacer? – jrummell
¿Qué hace Clients.SetConnectionTimeStamp? ¿Cuál es el propósito de esto? ¿Qué funcionalidad específica estás buscando implementar? Si desea una respuesta de calidad, debe proporcionar esta información. – cadrell0
Esto es mejor hacerlo con un temporizador. – Aristos