我需要執行一個無限循環並且想要在global.asax
中啓動執行。 我的問題是我該怎麼做呢?我應該開始一個新的線程還是應該使用異步和任務或其他任何東西?在while循環中我需要做await TaskEx.Delay(5000);
正確實現後臺進程ASP.NET中的線程
我該如何做到這一點,以便它不會阻塞任何其他進程,並且不會造成內存泄漏?
我使用VS10,AsyncCTP3,MVC4
編輯:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
所有我需要做的是作爲一個單獨的實例,只要全球的應用可以運行此。
編輯:解決
這是在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
{
///
}
}
我發現有關如何使用異步工人這個漂亮的文章:http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
這: http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
但我認爲我的需要s這一個將是完美的: http://forums.asp.net/t/1433665.aspx/1
你到底想幹什麼? – jrummell
Clients.SetConnectionTimeStamp做什麼?它的目的是什麼?你希望實現哪些特定的功能?如果你想要一個高質量的答案,你需要提供這些信息。 – cadrell0
這是更好的做一個計時器。 – Aristos