Reg*_*ser 15 asp.net asp.net-mvc multithreading
我需要执行一个无限的while循环,并希望启动执行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);
}
}
Run Code Online (Sandbox Code Playgroud)
我需要做的就是在应用程序可用时将其作为全局单例实例运行.
编辑:解决
这是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
{
///
}
}
Run Code Online (Sandbox Code Playgroud)
我发现这篇关于如何使用异步工作者的好文章: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
jru*_*ell 15
ASP.NET不是为处理这种要求而设计的.如果你需要不断运行的东西,你最好创建一个Windows服务.
更新
ASP.NET不适用于长时间运行的任务.它旨在快速响应HTTP请求.请参阅Cyborgx37的答案或我可以使用线程在IIS上执行长时间运行的作业吗?原因有几个.
更新
既然你最后提到你正在使用SignalR,我看到你试图在ASP.NET中托管SignalR,对吗?我认为你的方法是错误的,请参阅项目维基上引用的示例NuGet包.此示例使用a 来管理任务.IAsyncHttpHandler
Pet*_*ter 10
您可以在global.asax中启动一个线程,但它只会运行直到您的asp.net进程被回收.这将至少每天发生一次,或者当没有人使用您的网站时.如果进程被回收,那么线程重新启动的唯一方法就是在您的站点上点击时.所以线程没有继续运行.
要获得持续的过程,最好启动Windows服务.
如果您执行"进行中"解决方案,它实际上取决于您正在做什么.线程本身不会导致内存或死锁问题.你应该添加一个meganism来停止你的线程在应用程序停止时.否则重启将花费很长时间,因为它会等待你的线程停止.
小智 5
这是一篇旧帖子,但当我为此进行搜索时,我想报告一下,在 .NET 4.5.2 中有一种使用 QueueBackgroundWorkItem 的本机方法。
看看这篇文章:https : //blogs.msdn.microsoft.com/webdev/2014/06/04/queuebackgroundworkitem-to-reliably-schedule-and-run-background-processes-in-asp-net/
马里亚诺
我发现这篇关于如何使用异步工作线程的好文章,将尝试一下。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
归档时间: |
|
查看次数: |
33257 次 |
最近记录: |