2012-02-14 107 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,都可以訪問靜態變量並保留該狀態。在控制返回之前,其他線程可以輕鬆修改此變量的內容。