私はLazy <T>(bool)コンストラクタに関するMicrosoftのドキュメントを読んでいると混乱します。Lazy (bool)コンストラクタドキュメント
でisThreadSafe:
パラメータとして記載されている複数のスレッドが同時に使用可能なこのインスタンスを作成する場合はtrue。 falseを指定すると、一度に1つのスレッドだけがインスタンスを使用できるようになります。
私は通常、アクセサに記述したコードがある場合:
If _rulesCache Is Nothing Then
SyncLock (_lockRulesCache)
If _rulesCache Is Nothing Then
_rulesCache = New RulesCache()
End If
End SyncLock
End If
Return _rulesCache
私は怠惰なタイプのコンストラクタでTrueまたはFalseを使用しますか?
Private _rulesCache As New Lazy(Of RulesCache)(**?**)
だから私のアクセサは次のようになります。
Return _rulesCache.Value
1)オブジェクトが作成されると、それは内部的に複数のスレッドのアクセスを処理することができます。
2)複数のスレッドがアクセサーに同時に近づき、オブジェクトが存在しない場合は、一度しか作成されないことを確認する必要があります。
ドキュメントによれば、文1はパラメータが偽であることを意味します。ステートメント2は、パラメーターが真でなければならないことを意味します。
私はこれを過度に考えているように感じています。それは単に私をもっと混乱させてしまいます。または上記の2つのステートメントは実際には互いに不安定です。オブジェクトのインスタンス化を管理するために手動でロックするだけでいいですか?
したがって、isThreadSafeの値は、Lazyのインスタンスが複数のスレッドを同時にインスタンス化しようとするか(true)、単一スレッド環境で使用されているかどうかを解釈する必要がありますそれをインスタンス化する単一のスレッド(false)はい? – ulty4life
はい、正確な要約です。 – mquander