控制器方法之间的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方法的执行?

控制器方法之间的MVC3会话不一致

在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";
}