2012-02-08 63 views
0

我有两个控制器方法:MVC3会话控制器方法之间不一致吗?

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中的可变更改?

回答

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"; 
} 
+0

因此,一个会话每个线程创建?我将如何解决这个问题? – Tjaart 2012-02-08 09:14:08

+0

@Tjaart。我加了一个snipet。 – gdoron 2012-02-08 09:23:48

+0

谢谢!这很好! – Tjaart 2012-02-08 09:47:32

相关问题