2012-02-08 69 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

相關問題