C# 控制器中未设置变量值

C# 控制器中未设置变量值,c#,asp.net-mvc,C#,Asp.net Mvc,控制器为: bool isThreadComplete = false; public ActionResult generateDoc() { Thread thread = new Thread(threadSleep); thread.Start(); return Json(true); } public void threadSleep() { Thread.Sleep(30000); isThreadComplete =

控制器为:

bool isThreadComplete = false;
public ActionResult generateDoc()
{            
    Thread thread = new Thread(threadSleep);
    thread.Start();
    return Json(true);
}
public void threadSleep()
{
    Thread.Sleep(30000);
    isThreadComplete = true;
}
public ActionResult callThreadSleep() {
    return Json(isThreadComplete);
}

当我使用ajax调用
callThreadSleep
时,即使在30秒后,它也不会设置变量
isThreadComplete
的值。有什么建议吗?

默认情况下,每个请求都有自己的控制器实例,您不应该从控制器启动线程。这是怎么回事?您是否正在尝试实现“后台工作程序”?然后在上面搜索,比如“asp.NETMVC后台任务”,你会找到正确的方法。关于这个主题的文章已经足够多了,可以在这里重复。@CodeCaster我想要
isThreadComplete
值来做进一步的处理onward@debin,CodeCaster的意思是,您的ajax请求将使用不同的控制器实例来调用它,因此,isThreadComplete变量只能是您发出请求时初始化的值。要做到这一点,您需要一个跨请求保存的变量(我个人不会保存在您的控制器中),或者作为一个静态变量保存在单独的类中,或者使用类似会话和某种会话锁定机制来保持线程安全。@ChrisDisley thnx我解决了它。当多个用户同时使用此代码时,我的静态变量将中断。默认情况下,每个请求都有自己的控制器实例,您不应该从控制器启动线程。这是怎么回事?您是否正在尝试实现“后台工作程序”?然后在上面搜索,比如“asp.NETMVC后台任务”,你会找到正确的方法。关于这个主题的文章已经足够多了,可以在这里重复。@CodeCaster我想要
isThreadComplete
值来做进一步的处理onward@debin,CodeCaster的意思是,您的ajax请求将使用不同的控制器实例来调用它,因此,isThreadComplete变量只能是您发出请求时初始化的值。要做到这一点,您需要一个跨请求保存的变量(我个人不会保存在您的控制器中),或者作为一个静态变量保存在单独的类中,或者使用类似会话和某种会话锁定机制来保持线程安全。@ChrisDisley thnx我解决了它。当多个用户同时使用此代码时,我的静态变量将中断。