我有两种控制器方法:
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";
}
调用第一个方法,第二个方法用于停止第一个方法的执行。但是,当我在调试期间观察变量时,即使在调用其他控制器方法Session["done"]
false
值始终为AnotherMethod()
为什么会发生这种情况?如何在AnotherMethod中使用变量更改停止执行Nothing方法?
答案 0 :(得分:3)
在ASP .NET中,每个请求都有自己的会话状态副本,这意味着Session
是线程安全的。
您将需要其他方式来实现您想要做的事情,静态变量听起来合适。
阅读this 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";
}