Asp.net MVC批处理进程(外部线程)挂起,可能超时

本文关键字:挂起 超时 线程 外部 MVC net 批处理 进程 Asp | 更新日期: 2023-09-27 18:13:28

你好,我有一个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线程超时,是吗?

Asp.net MVC批处理进程(外部线程)挂起,可能超时

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

public JsonResult AjaxProcess()
{
    //process id
    string id = Guid.NewGuid().ToString();
    new Thread(() =>
    {
         doProcess(id);
    }).Start();
    return Json(id);
}

虽然这是可能的,但我建议不要使用Thread类在ASP上排队工作。NET(和一般)。IIS可能会尝试回收你的应用程序,因为你没有在线程池中注册你的工作,它不会意识到你正在运行这个后台工作线程,这会导致你的线程终止并没有完成。

如果你在。net Framework 4.5.2上运行,看看HostingEnvironment.QueueBackgroundWorkItem。如果没有,请查看Stephan Cleary实现的BackgroundTaskManager