2012-02-14 103 views
0

有时它你以为你知道,让你的头buzzz简单的事情....Asp.net C#静态方法线程安全的错误处理

我有一个使用静态方法一个Asp.Net(形式)申请一个非静态类在PostBack上做一些处理。这些方法需要返回布尔值。

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

我可能过度思考这一点,但,如果MyClass的有一个静态的ErrorMessage场,在页面中使用这样的:

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

我是正确的的errorMessage被有效地线程安全的,因为MyClass的是非静态,页面生活在一个特定的HttpContext和变量销毁PostBack?

有没有原因,或者更好的方法?

回答

1

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

摆脱你的C风格的返回码,而不是抛出异常。

+0

对,想也许我正在说自己陷入沉默......我可能只是使方法非静态并实例化MyClass。这是否有效,无论它是否在Asp.Net页面中,是的? – Serexx 2012-02-14 23:23:24

+0

@Serexx:如果你不共享实例,那么是的,它将是线程安全的。 – 2012-02-14 23:32:35

0

不,您的代码不是线程安全的。无论您的类是否为static,都可以访问静态变量并保留该状态。在控制返回之前,其他线程可以轻松修改此变量的内容。