控制器方法之间的MVC3会话不一致
本文关键字:会话 不一致 MVC3 方法 之间 控制器 | 更新日期: 2023-09-27 18:23:38
我有两种控制器方法:
public string Nothing()
{
if (Session["done"] == null)
{
Session["done"] = false;
}
while (!bool.Parse(Session["done"].ToString()))
{
System.Threading.Thread.Sleep(1000);
}
return "done";
}
public string AnotherMethod()
{
Session["done"] = true;
return "hello";
}
调用第一个方法,第二个方法用于停止第一个方法的执行。然而,当我在调试期间观察变量时,Nothing方法从未停止执行,Session["done"]
值始终为false
,即使在调用其他控制器方法AnotherMethod()
之后也是如此
为什么会发生这种情况,以及如何在AnotherMethod中通过变量更改来停止Nothing方法的执行?
在ASP.NET中,每个请求都有自己的会话状态副本,这意味着Session
是线程安全的。
你需要其他方式来实现你想要做的事情,静态变量听起来很合适。
阅读MSDN文章
示例:
public string Nothing()
{
FlagClass.Done = false;
while (!FlagClass.Done)
{
System.Threading.Thread.Sleep(1000);
}
return "done";
}
public string AnotherMethod()
{
FlagClass.Done = true;
return "hello";
}