我需要执行一个无限的 while 循环,并希望在
我只需要将它作为全局单例实例在应用程序可用的情况下运行即可。
编辑:已解决。
这是Global.asax中的最终解决方案。
我找到了一篇关于如何使用异步工作器的好文章: 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
global.asax
中启动执行。
我的问题是应该如何做?应该启动一个新线程还是使用 Async 和 Task 或其他任何东西?在 while 循环内部,我需要执行 await TaskEx.Delay(5000);
。
如何实现这一点,以便不会阻塞任何其他进程并且不会创建内存泄漏?
我使用 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 但是我认为对于我的需求,这个更完美: http://forums.asp.net/t/1433665.aspx/1