LazyInitializer.enSureInitialized はスレッドの安全性の明示的な約束を持っていますか?

StackOverflow https://stackoverflow.com/questions/5980536

質問

不動産噴射でテストできる怠惰な財産を作りたいです。私が怠惰なフィールドを使うことになっていたら、私はテスト中に自分のものを注入できるようになる方法はありません。これが私のコードです:

private IExpensive expensive;
private bool expensiveInitialized;
private object expensiveLockingObject = new object();

public IExpensive Expensive
{
   get
   {
      LazyInitializer.EnsureInitialized(ref expensive, ref expensiveInitialized, ref expensiveLockingObject,
         () => new Expensive(myStaticArg1, myStaticArg2, ...));

      return expensive;
   }
   internal protected set
   {
      expensiveInitialized = true;
      expensive = value;
   }
}
.

BCLチームからこのコードがスレッドセーフであると約束があるかどうか疑問に思いますか?ドキュメント

役に立ちましたか?

解決

ドキュメントリンクから:

LazyInitializerのメソッドはスレッドセーフで、同時に複数のスレッドから呼び出される可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top