LazyThreadSafetyMode 列挙型
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Lazy<T> インスタンスが複数のスレッド間でアクセスを同期する方法を指定します。
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- 継承
フィールド
ExecutionAndPublication | 2 | ロックを使って確実に 1 つのスレッドのみが Lazy<T> インスタンスをスレッド セーフな方法で初期化します。 事実上、初期化メソッドはスレッド セーフな方法 (フィールド名と呼ばれます) で実行されます |
None | 0 | Lazy<T> インスタンスはスレッド セーフではありません。インスタンスに複数のスレッドからアクセスした場合の動作は未定義です。 高いパフォーマンスが重要であり、Lazy<T> インスタンスが複数のスレッドから初期化されないことが保証されている場合にのみ、このモードを使ってください。 初期化メソッドを指定した ( |
PublicationOnly | 1 | 複数のスレッドで Lazy<T> のインスタンスを同時に初期化しようとすると、すべてのスレッドで初期化メソッド (または、初期化メソッドが存在しない場合はパラメーターなしのコンストラクター) の実行が許可されます。 初期化を最初に完了したスレッドが、Lazy<T> インスタンスの値を設定します。 これはフィールド名と呼ばれます |
注釈
コンストラクターのLazy<T>パラメーターを指定するには、この列挙体をmode
使用します。 スレッド同期に対するすべてのコンストラクターの影響は、パラメーターがあるかどうかに関係なく mode
、この列挙の観点から説明できます。
Lazy<T>インスタンスは、ユーザー指定の初期化メソッドまたはパラメーターなしのコンストラクターT
によって初期化されます。 初期化メソッドは、コンストラクターのvalueFactory
Lazy<T>パラメーターによって指定されます。 このメソッドは、のインスタンス T
によって遅延インスタンス化される型である 、のインスタンスを返します Lazy<T>。 コンストラクターにパラメーターがない valueFactory
場合は、パラメーターなしのコンストラクター T
を使用してインスタンスを Lazy<T> 初期化します。 どちらの場合も、プロパティを初めて呼び出したときに初期化が Lazy<T>.Value 行われます。
この列挙は、インスタンスのスレッド セーフを Lazy<T> 指定するだけでなく、例外キャッシュにも影響します。 インスタンスに対して Lazy<T> 例外がキャッシュされている場合、インスタンスを初期化する機会は 1 つだけです。 プロパティを初めて呼び出 Lazy<T>.Value すと例外がスローされた場合、その例外はキャッシュされ、以降のすべてのプロパティ呼び出しで Lazy<T>.Value 再スローされます。 例外をキャッシュする利点は、エラーが発生した場合でも、2 つのスレッドが常に同じ結果を得る点です。
PublicationOnly モードを指定すると、例外はキャッシュされません。 None または ExecutionAndPublication を指定する場合、キャッシュは、初期化メソッドを指定するか、パラメーターなしのコンストラクター T
を使用できるかによって異なります。 初期化メソッドを指定すると、この 2 つのモードで例外キャッシュが有効になります。 初期化メソッドは非常に単純にすることができます。 たとえば、T
にパラメーターのないコンストラクターを呼び出すことができます。C# の場合は new Lazy<Contents>(() => new Contents(), mode)
、Visual Basic の場合は New Lazy(Of Contents)(Function() New Contents())
です。 初期化メソッドを指定しないコンストラクターを使用する場合、パラメーターなしのコンストラクター T
によってスローされる例外はキャッシュされません。 次の表は、例外キャッシュの動作をまとめたものです。
モード | 初期化メソッドの使用 | パラメーターなしのコンストラクターを使用する T |
---|---|---|
なし | キャッシュ済み | キャッシュなし |
PublicationOnly | キャッシュなし | キャッシュなし |
ExecutionAndPublication | キャッシュ済み | キャッシュなし |