-1

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

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

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

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

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

每次填充列表时,它都会被实例化:

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

如果这不是线程安全的,我怎样才能使它成为线程安全的?我不能让列表非静态并且在同一页面上,因为有一个单独的问题,即数据仅在每次绑定到 page_load 时才绑定: OnDataBind 仅在第一次回发时触发

4

2 回答 2

6

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

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

于 2013-02-25T17:25:57.973 回答
0

最好避免一起使用静态变量。静态变量不太适合单元测试。静态类和变量不能被存根或模拟。

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

于 2013-02-25T18:40:56.387 回答