我知道在这里已经多次询问过这种事情,但我仍然没有完全理解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
答案 0 :(得分:6)
显然不安全,因为静态变量在请求之间共享。将列表移动到特定请求所特有的某个位置,例如页面实例字段。
如果需要在回发之间传递状态,请使用ViewState或其他一些非全局机制。
答案 1 :(得分:0)
如果你一起避免使用静态变量,那就最好了。 静态变量并不适合单元测试。静态类和变量不能被存根或模拟。
但是,在您的实例中,没有静态变量不是线程安全的。