2009-05-15 12 views
49

私はC#でスレッドの静的オブジェクトを使用するコードをいくつか持っています。スタティックC#で修正されたThreadStatic#

[ThreadStatic] 
private DataContext connection 

この場合、静的修飾子をスレッドの静的コンテキストに置くと何か変更があればどうなるでしょうか?

[ThreadStatic] 
private static DataContext connection 

最初にスレッドごとにインスタンスごとに1つのコピーが存在し、スレッドごとに1つのコピーのみが存在しますか?

+1

+1を無視されます。私はこれを考えなかった。 –

+0

itsmattを編集してくれてありがとう! –

答えて

53

ThreadStaticAttributeは、静的変数でのみ使用するように設計されています(MSDN points out)。インスタンス変数でそれを使うと、私はそれがまったく何もしないだろうと思っています。

+1

何をするべきかに関する正式な方針を記述した文書を知っている人は誰ですか?このように使用されていないと、コンパイルエラーが発生したり、コンパイルエラーが発生したりすることはありませんか? – Catskul

+6

これはコンパイラのエラーだった場合にはうれしいことです。なぜなら、謎のスレッディング関連のバグを追跡するのに2時間を費やしてしまったからです。これは、[ThreadStatic]がインスタンスフィールドで使用されているためeffect ... –

+0

@romkyns same here ...インスタンスフィールドで[ThreadStatic]によって引き起こされたバグを釘付けにしました。 – chakrit

8

最初のケースではおそらく無視されますが、2番目のケースでは正しいですが、スレッドごとに1つのインスタンスです。

6

MSDN氏は述べています:

フィールドの値がスレッドごとに一意であることを示します。

だから私はあなたの最初のケースが間違っていると思います...属性は、おそらく良い質問に対して

関連する問題