0

有时,您认为自己知道的简单事情会让您头晕目眩……

我有一个 Asp.Net(表单)应用程序,它使用非静态类的静态方法对 PostBack 进行一些处理。这些方法需要返回 bool。

当静态方法中出现错误时,我不希望仅仅将异常抛出回页面级代码,而是在静态方法中显式处理它并返回 false。

我可能想多了,但是,如果 MyClass 有一个静态 ErrorMessage 字段,在页面中使用如下:

if(!MyClass.DoSomething){
  errorLabel.Text = MyClass.ErrorMessage; //Static ErrorMessage is set 
}

ErrorMessage 实际上是线程安全的,因为 MyClass 是非静态的,页面存在于特定的 HttpContext 中并且变量在 PostBack 上被销毁,我对吗?

有没有理由不这样做,或者有更好的方法?

4

2 回答 2

1

如果ErrorMessage由 设置DoSomething,则不是线程安全的。如果在 if 测试之后和分配之前获得上下文切换,它可能会被另一个线程重新分配。静态字段是静态的,与包含的类是否为静态无关。

摆脱您的 C 样式返回代码,并在错误时抛出异常。

于 2012-02-14T23:05:12.870 回答
0

不,您的代码不是线程安全的。不管你的类是否是静态的,静态变量都可以被访问并保持状态。在您的控制返回之前,其他线程可以轻松地修改 this 变量的内容。

于 2012-02-14T23:09:23.973 回答