Poprawnie implementuj wątek procesu w tle w ASP.NET
Muszę wykonać nieskończoną pętlę while i chcę zainicjować wykonanie wglobal.asax
. Moje pytanie brzmi: jak dokładnie mam to zrobić? Czy powinienem założyć nowy wątek, czy powinienem użyć Async i Task lub cokolwiek innego? W pętli while muszę to zrobićawait TaskEx.Delay(5000);
Jak to zrobić, aby nie blokował żadnych innych procesów i nie tworzy przecieków pamięci?
Używam VS10, AsyncCTP3, MVC4
EDYTOWAĆ:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
Wszystko, co muszę zrobić, to uruchomić to jako pojedynczą instancję globalnie, dopóki aplikacja jest dostępna.
EDYCJA: ROZWIĄZANE
To ostateczne rozwiązanie w 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
{
///
}
}
Znalazłem ten fajny artykuł o tym, jak korzystać z asynchronicznego pracownika:http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
I to:http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
Ale myślę, że dla moich potrzeb ten będzie idealny:http://forums.asp.net/t/1433665.aspx/1