asp.net - 在ASP.NET中正确实现后台进程线程

标签 asp.net asp.net-mvc multithreading

我需要执行一个无限的while循环,并想在global.asax中启动执行。
我的问题是我应该怎么做?我应该启动一个新线程,还是应该使用异步和任务或其他工具?在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

最佳答案

ASP.NET并非旨在处理此类要求。如果您需要某些东西来持续运行,最好创建一个Windows服务。

更新

ASP.NET不适用于长时间运行的任务。它旨在快速响应HTTP请求。出于某些原因,请参见Cyborgx37's answerCan I use threads to carry out long-running jobs on IIS?

更新

既然您终于提到您正在使用SignalR,我看到您正在尝试在ASP.NET中托管SignalR,对吗?我认为您正在以错误的方式进行操作,请参阅NuGet package上引用的示例project wiki。本示例使用 IAsyncHttpHandler 来管理任务。

关于asp.net - 在ASP.NET中正确实现后台进程线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852515/

相关文章:

c++ - 如何为结构成员分配其他函数返回的值?

ios - 有没有办法弄清楚 NSManagedObjectContext 在哪个线程上?

c# - 使用 asp.net core 1.0 的 https 上的 Kestrel

asp.net - IFrame 功能的 JQuery 方法

c# - 类型不包含 'Round'和 'Parse'的定义

c# - 如何在WebAPI Controller 中接收动态数据

c# - 如何在 MVC 操作中的 webgrid 列内添加隐藏字段

c++ - 条件变量 - 等待/通知竞争条件

c# - 如何将视频中的图像显示为播放列表的预览

jquery - 谷歌 ReCaptcha 和欧芹