C# asp.net mvc批处理进程(外部线程)挂起,可能超时?

C# asp.net mvc批处理进程(外部线程)挂起,可能超时?,c#,asp.net,asp.net-mvc,multithreading,iis,C#,Asp.net,Asp.net Mvc,Multithreading,Iis,您好,我有一个带有Json视图的控制器,如下所示: public JsonResult AjaxProcess() { //process id string id = Guid.NewGuid().ToString(); new Thread(() => { doProcess(id); } return Json(id); } 这个过程在

您好,我有一个带有Json视图的控制器,如下所示:

    public JsonResult AjaxProcess()
    {
        //process id
        string id = Guid.NewGuid().ToString();

        new Thread(() =>
        {
             doProcess(id);
        }
        return Json(id);
    }

这个过程在我使用VisualStudio Web Express 2012(内置服务器)的开发机器上运行正常,但在暂存环境中,在处理过程中挂起,我在想是否可能与IIS(版本7)有关,可能是线程超时?我知道一个新线程()会在IIS线程池之外创建一个线程,所以IIS线程超时不会影响它,是吗?

我不确定这在您的开发机器上是如何工作的,您还没有发出
线程来启动它。您需要调用
Thread.Start
才能开始处理:

public JsonResult AjaxProcess()
{
    //process id
    string id = Guid.NewGuid().ToString();

    new Thread(() =>
    {
         doProcess(id);
    }).Start();
    return Json(id);
}
虽然这是可能的,但我建议不要使用
Thread
类在ASP.NET(以及一般情况下)上对工作进行排队。IIS可能会尝试回收您的应用程序,由于您没有向线程池注册您的工作,因此它不会意识到您正在运行此后台工作程序,这将导致您的线程终止且无法完成


如果您运行的是.NETFramework4.5.2,请查看。如果没有,请检查Stephan Cleary的

实现。我没有看到您使用
线程.Start
。抱歉,我编写了一个快速示例,我忘记了线程的开始,但是,问题是关于使用Thread()的开发服务器和IIS之间的差异,因为在IIS上进程挂起。如果您真正的代码使用
开始
,然后请编辑它以包含
Start
。抱歉,正如我在上面所评论的那样,我写了一个快速示例,但我忘记了线程的开始。另一方面,我理解你对IIS回收的看法,我认为回收过程没有达到标准线程。我想做的是从web执行一个服务器任务,不需要与IIS相关,也可以是一个外部进程,但为了简单起见,我更喜欢使用相同的代码,您推荐什么?任务一个月执行一次或两次,不需要执行。如果一个月完成一次或两次任务,我肯定会考虑使用超出MVC项目范围之外的内容。我甚至可以考虑使用Windows或某种Windows服务,而唯一的责任就是做这项特定的工作。