LazyInitializer.enSureInitialized はスレッドの安全性の明示的な約束を持っていますか?
-
12-11-2019 - |
質問
不動産噴射でテストできる怠惰な財産を作りたいです。私が怠惰なフィールドを使うことになっていたら、私はテスト中に自分のものを注入できるようになる方法はありません。これが私のコードです:
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のメソッドはスレッドセーフで、同時に複数のスレッドから呼び出される可能性があります。
所属していません StackOverflow