は私がのsomeMethodにとNullReferenceExceptionを取得します。変更するのでとNullReferenceException
get
{
if (_b == null)
_b = new B();
}
:私は、他のスレッドがこのメソッドを呼び出し、Bのヌルになりますが、(私はThreadStaticを理解していれば)他のスレッドが、私はちょうど使用することはできませんB.
にアクセスすることを許されるべきではないと仮定しますBのコンストラクタをpublicに変換し、このように使用すると、Bのインスタンスにいくつかのプロパティ(Cなど)がnullになります。
SomeMethodの内部にロックを設定しようとしましたが、問題を解決しませんでした。
私はクラスBの変更を避けたいと思います。それがないと例外を防ぐことは可能ですか?
あなたはnew演算子を前_bにアクセスするには、各スレッドで呼び出されることが保証されていないので、あなたは基本的にこの不正行為を求めています。 ThreadStaticを実行する通常の方法は、nullの場合、バッキングフィールドを更新する静的プロパティにラップすることです。 – hoodaticus
@RomaDoskoch、私も。 – hoodaticus
代わりに(ThreadLocal)[https://msdn.microsoft.com/en-us/library/dd642243(v = vs.110).aspx]を使用してください。 –