Ho bisogno di eseguire un ciclo while infinito e voglio iniziare l'esecuzione in global.asax
. La mia domanda è come esattamente dovrei farlo? Devo iniziare una nuova discussione o dovrei usare Async e Task o altro? All'interno del ciclo while devo fare await TaskEx.Delay(5000);
Implementare correttamente il processo in background Thread in ASP.NET
Come faccio a fare questo in modo che non bloccherà nessun altro processo e non creerà perdite di memoria?
Io uso VS10, AsyncCTP3, MVC4
EDIT:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
Tutto quello che devi fare è eseguire questo come istanza Singleton a livello globale finché applicazione è disponibile.
EDIT: Risolto
Questa è la soluzione finale di 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
{
///
}
}
ho trovato questo simpatico articolo su come utilizzare lavoratore asincrona: http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
E questo: http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
Ma penso per il mio bisogno s questo sarà perfetto: http://forums.asp.net/t/1433665.aspx/1
cosa stai cercando di fare? – jrummell
Cosa fa Clients.SetConnectionTimeStamp? Qual è lo scopo di questo? Quale funzionalità specifica stai cercando di implementare? Se si desidera una risposta di qualità, è necessario fornire queste informazioni. – cadrell0
Questo è meglio farlo con un timer. – Aristos