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线程超时,是吗?
我不确定这在您的开发机器上是如何工作的,您还没有发布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