MVC3 Session在控制器方法之间是不一致的吗?

时间:2012-02-08 09:09:16

标签: c# asp.net asp.net-mvc asp.net-mvc-3 session

我有两种控制器方法:

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"]

之后,Nothing方法也永远不会停止执行且false值始终为AnotherMethod()

为什么会发生这种情况?如何在AnotherMethod中使用变量更改停止执行Nothing方法?

1 个答案:

答案 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";
}