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
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 efektivně provádí bezpečným způsobem s vlákny (označované jako |
None | 0 | Instance Lazy<T> není bezpečná pro vlákno. Pokud je instance přístupná z více vláken, jeho chování není definováno. Tento režim používejte pouze v případě, že je zásadní vysoký výkon a Lazy<T> instance se nikdy neicializuje z více než jednoho vlákna. Pokud použijete Lazy<T> konstruktor, který určuje inicializační metodu ( |
PublicationOnly | 1 | Pokud se několik 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 |
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 bez ohledu na to, zda mají mode
parametry.
Lazy<T> Instance je inicializována buď metodou inicializace určenou 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 konstruktor bez parametrů k T
inicializaci Lazy<T> instance. V jiném případě inicializace nastane při prvním volání Lazy<T>.Value vlastnosti.
Kromě určení bezpečnosti Lazy<T> vlákna instance má tento výčet vliv na ukládání výjimek do mezipaměti. Pokud jsou výjimky uložené v mezipaměti pro Lazy<T> instanci, získáte jen jednu šanci inicializovat instanci. Pokud se při prvním volání Lazy<T>.Value vlastnosti vyvolá výjimka, tato výjimka se ukládá do mezipaměti a opakuje se 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, jestli zadáte inicializační metodu nebo povolíte použití konstruktoru T
bez parametrů. Určení metody inicializace umožňuje ukládání výjimek do mezipaměti pro tyto dva režimy. Inicializační metoda 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 Visual Basic. Pokud použijete konstruktor, který nezadává inicializační metodu, výjimky, které vyvolá konstruktor bez parametrů, T
nejsou uloženy do mezipaměti. Následující tabulka shrnuje chování ukládání výjimek do mezipaměti.
Režim | Použití metody inicializace | Použití konstruktoru bez parametrů pro T |
---|---|---|
Žádné | V mezipaměti | Není uložená v mezipaměti |
PublicationOnly | Není uložená v mezipaměti | Není uložená v mezipaměti |
ExecutionAndPublication | V mezipaměti | Není uložená v mezipaměti |