LazyThreadSafetyMode Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Specifica il modo in cui un'istanza di Lazy<T> sincronizza l'accesso tra più thread.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Ereditarietà
Campi
| Nome | Valore | Descrizione |
|---|---|---|
| None | 0 | L'istanza Lazy<T> non è thread-safe. Se si accede all'istanza da più thread, il comportamento non è definito. Usare questa modalità solo quando le prestazioni elevate sono cruciali e l'istanza Lazy<T> non viene mai inizializzata da più di un thread. Se si usa un costruttore che specifica un Lazy<T> metodo di inizializzazione ( |
| PublicationOnly | 1 | Quando più thread tentano di inizializzare un'istanza Lazy<T> contemporaneamente, tutti i thread possono eseguire il metodo di inizializzazione (o il costruttore senza parametri, se non esiste alcun metodo di inizializzazione). Il primo thread per completare l'inizializzazione imposta il valore dell'istanza Lazy<T> . Questo nome viene definito nei |
| ExecutionAndPublication | 2 | I blocchi vengono usati per garantire che solo un singolo thread possa inizializzare un'istanza Lazy<T> in modo thread-safe. In effetti, il metodo di inizializzazione viene eseguito in modo thread-safe (noto come |
Commenti
Utilizzare questa enumerazione per specificare il mode parametro dei Lazy<T> costruttori. Gli effetti di tutti i costruttori sulla sincronizzazione dei thread possono essere descritti in termini di questa enumerazione, indipendentemente dal fatto che abbiano mode o meno parametri.
Un'istanza Lazy<T> viene inizializzata da un metodo di inizializzazione specificato dall'utente o dal costruttore senza parametri per T. Il metodo di inizializzazione viene specificato dal valueFactory parametro di un Lazy<T> costruttore. Il metodo restituisce un'istanza di T, ovvero il tipo di cui viene creata un'istanza differita dall'istanza di Lazy<T>. Se un costruttore non dispone di un valueFactory parametro, viene usato il costruttore senza parametri per T per inizializzare l'istanza Lazy<T> . In entrambi i casi, l'inizializzazione viene eseguita la prima volta che si chiama la Lazy<T>.Value proprietà .
Oltre a specificare la thread safety di un'istanza Lazy<T> , questa enumerazione influisce sulla memorizzazione nella cache delle eccezioni. Quando le eccezioni vengono memorizzate nella cache per un'istanza Lazy<T> di , si ottiene una sola possibilità di inizializzare l'istanza. Se viene generata un'eccezione la prima volta che si chiama la Lazy<T>.Value proprietà , tale eccezione viene memorizzata nella cache e rigenerata in tutte le chiamate successive alla Lazy<T>.Value proprietà . Il vantaggio della memorizzazione nella cache delle eccezioni è che qualsiasi due thread ottiene sempre lo stesso risultato, anche quando si verificano errori.
Quando si specifica la modalità PublicationOnly, le eccezioni non vengono mai memorizzate nella cache. Quando si specifica None o ExecutionAndPublication, la memorizzazione nella cache dipende dal fatto che si specifichi un metodo di inizializzazione o che il costruttore senza parametri venga T usato. Se si specifica un metodo di inizializzazione, la memorizzazione nella cache delle eccezioni viene abilitata per queste due modalità. Il metodo di inizializzazione può essere molto semplice. Ad esempio, può chiamare il costruttore senza parametri per T: new Lazy<Contents>(() => new Contents(), mode) in C# o New Lazy(Of Contents)(Function() New Contents()) in Visual Basic. Se si usa un costruttore che non specifica un metodo di inizializzazione, le eccezioni generate dal costruttore senza parametri per T non vengono memorizzate nella cache. Nella tabella seguente viene riepilogato il comportamento di memorizzazione nella cache delle eccezioni.
| Modalità | Uso del metodo di inizializzazione | Uso del costruttore senza parametri per T |
|---|---|---|
| Nessuno | Memorizzati nella cache | Non memorizzato nella cache |
| PublicationOnly | Non memorizzato nella cache | Non memorizzato nella cache |
| ExecutionAndPublication | Memorizzati nella cache | Non memorizzato nella cache |