LazyThreadSafetyMode Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje, jak Lazy<T> instance synchronizuje přístup mezi více vlákny.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Dědičnost
Pole
| Name | Hodnota | Description |
|---|---|---|
| None | 0 | Instance Lazy<T> není bezpečná pro přístup z více vláken. Pokud je instance přístupná z více vláken, jeho chování není definováno. Tento režim použijte pouze v případě, že je vysoký výkon zásadní a Lazy<T> instance je zaručená, že se nikdy neinicializuje z více než jednoho vlákna. Pokud použijete Lazy<T> konstruktor, který určuje inicializační metodu ( |
| PublicationOnly | 1 | Pokud se více vláken pokusí inicializovat Lazy<T> instanci současně, všechna vlákna mohou spustit inicializační metodu (nebo konstruktor bez parametrů, pokud neexistuje žádná inicializační metoda). První vlákno k dokončení inicializace nastaví hodnotu Lazy<T> instance. To se označuje jako |
| ExecutionAndPublication | 2 | Zámky slouží k zajištění toho, aby instanci inicializovalo Lazy<T> pouze jedno vlákno bezpečným způsobem. Metoda inicializace se v podstatě provádí bezpečným způsobem s vlákny (označované jako |
Poznámky
Tento výčet použijte k určení mode parametru konstruktorů Lazy<T> . Účinky všech konstruktorů na synchronizaci vláken lze popsat z hlediska tohoto výčtu, ať už mají mode parametry nebo ne.
Instance Lazy<T> je inicializována buď metodou inicializace zadanou uživatelem, nebo konstruktorem bez parametrů pro T. Inicializační metoda je určena valueFactory parametrem konstruktoru Lazy<T> . Metoda vrátí instanci T, což je typ, který je lazily instance instance Lazy<T>. Pokud konstruktor nemá valueFactory parametr, použije se k inicializaci Lazy<T> instance konstruktor T bez parametrů. V obou případech dojde k inicializaci při prvním volání Lazy<T>.Value vlastnosti.
Kromě určení zabezpečení Lazy<T> vlákna instance má tento výčet vliv na ukládání výjimek do mezipaměti. Pokud jsou výjimky pro instanci Lazy<T> uloženy v mezipaměti, získáte pouze jednu šanci inicializovat instanci. Pokud dojde k vyvolání výjimky při prvním volání Lazy<T>.Value vlastnosti, tato výjimka je uložena do mezipaměti a znovu vyvolán při všech následných voláních vlastnosti Lazy<T>.Value . Výhodou výjimek ukládání do mezipaměti je, že každé dvě vlákna vždy získají stejný výsledek, i když dojde k chybám.
Když zadáte režim PublicationOnly, výjimky se nikdy neukládají do mezipaměti. Když zadáte None nebo ExecutionAndPublication, ukládání do mezipaměti závisí na tom, zda zadáte inicializační metodu nebo povolíte použití konstruktoru T bez parametrů. Zadání metody inicializace umožňuje ukládání výjimek do mezipaměti pro tyto dva režimy. Metoda inicializace může být velmi jednoduchá. Může například volat konstruktor bez parametrů pro T: new Lazy<Contents>(() => new Contents(), mode) v jazyce C# nebo New Lazy(Of Contents)(Function() New Contents()) v jazyce Visual Basic. Pokud použijete konstruktor, který neurčí inicializační metodu, výjimky vyvolané konstruktorem bez parametrů nejsou T uloženy do mezipaměti. Následující tabulka shrnuje chování ukládání výjimek do mezipaměti.
| Mode | Použití metody inicializace | Použití konstruktoru bez parametrů pro T |
|---|---|---|
| None | Mezipaměti | Neul. |
| PublikaceOnly | Neul. | Neul. |
| ExecutionAndPublication | Mezipaměti | Neul. |