2011-10-18 76 views
0

我正在使用線程。我不確定是否需要國旗ThreadStatic。無論如何,任何線程都可以訪問簡單類型的布爾值。Threadstatic標誌是否需要?

當在多個線程的工作是什麼足夠多:

Private _ImageToggle As Boolean 

<ThreadStatic()> Private _ImageToggle As Boolean 

* MY馬克Gravells的解釋回答*

如果有多個實例,每個都使用多線程,「Threadstatic」標誌可以是使用共享值的解決方案。就我現在理解的基本類型而言,它從來都沒有意義。

+1

對於「是否需要」,我們*通常*需要更多關於上下文的詳細信息。特別是在線程方面,「如何使用/使用/更改?」 **非常重要。 –

+0

Ok Marc。換句話說,我可以問,什麼時候需要?在我的問題中,我只談論線程和對共享值的訪問。也許你知道這個標誌很重要的情況嗎? – Nasenbaer

+1

當你想要有一個值*每個線程*(而不是一個單一的值)。例如,也許每個線程代表不同的連接/客戶端。但正如我所提到的,我寧願自己擁有一個明確的上下文實例,只是根據需要將該實例傳遞給每個線程 - 這樣就更容易安全地重用線程。 –

回答

2

由於它不是static(VB中的Shared),因此[ThreadStatic]不起作用。沒有;它不需要這個。

當應用於靜態字段時,[ThreadStatic]表示每個線程正在與不同的值進行通信(實質上它變爲線程本地存儲)。這是雙刃的,因爲任何基於異步的(包括ASP.NET和WCF)代碼都必須小心謹慎,真的是。一般來說,我會避免這個標誌 - 最好使用一個實例成員並將其作爲上下文傳遞(在線程之間)。