Мне нужно выполнить бесконечный цикл while и начать инициировать выполнение в global.asax
.
Мой вопрос: как именно я должен это делать? Должен ли я начать новую тему или использовать Async и Task или что-нибудь еще? Внутри цикла while мне нужно сделать await TaskEx.Delay(5000);
Как это сделать, чтобы он не блокировал другие процессы и не создавал утечки памяти?
Я использую VS10, AsyncCTP3, MVC4
EDIT:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
Все, что мне нужно сделать, это запустить это как экземпляр singleton по всему миру, пока доступно приложение.
РЕДАКТИРОВАТЬ: решаемые
Это окончательное решение в 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
{
///
}
}
Я нашел эту приятную статью о том, как использовать async worker: http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
И это: http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
Но я думаю, что для моих потребностей это будет идеально: http://forums.asp.net/t/1433665.aspx/1