这个静态变量线程在ASP.net中是否安全c#

时间:2013-02-25 17:21:20

标签: c# asp.net data-binding thread-safety

我知道在这里已经多次询问过这种事情,但我仍然没有完全理解ASP中的线程安全性。

C#: 其中Util是一个静态类,而List是一个静态列表。

Util.theList= new List<Object>();
 Util.theList.Add(someObject);

页面加载一次,然后一秒钟后(POSTACK后1秒)填充Util.theList并重新加载页面以与新填充的列表数据绑定:

this.Repeater.DataSource = Util.theList;
            this.Repeater.DataBind();

每次填充List时,它都是INSTANTIATED:

Util.theList= new List<Object>(); 

如果这不是线程安全的,我怎样才能使线程安全? 我不能让列表非静态并且在同一页面上,因为一个单独的问题,如果数据绑定在page_load上,则每次绑定数据: OnDataBind only fires on first postback

2 个答案:

答案 0 :(得分:6)

显然不安全,因为静态变量在请求之间共享。将列表移动到特定请求所特有的某个位置,例如页面实例字段。

如果需要在回发之间传递状态,请使用ViewState或其他一些非全局机制。

答案 1 :(得分:0)

如果你一起避免使用静态变量,那就最好了。 静态变量并不适合单元测试。静态类和变量不能被存根或模拟。

但是,在您的实例中,没有静态变量不是线程安全的。