LazyThreadSafetyMode Enum
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee geeft u op hoe een Lazy<T> exemplaar de toegang tussen meerdere threads synchroniseert.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Overname
Velden
| Name | Waarde | Description |
|---|---|---|
| None | 0 | Het Lazy<T> exemplaar is niet threadveilig. Als het exemplaar wordt geopend vanuit meerdere threads, is het gedrag ervan niet gedefinieerd. Gebruik deze modus alleen als hoge prestaties cruciaal zijn en het Lazy<T> exemplaar wordt gegarandeerd nooit geïnitialiseerd vanuit meer dan één thread. Als u een Lazy<T> constructor gebruikt waarmee een initialisatiemethode ( |
| PublicationOnly | 1 | Wanneer meerdere threads tegelijkertijd een Lazy<T> exemplaar proberen te initialiseren, mogen alle threads de initialisatiemethode uitvoeren (of de constructor zonder parameters, als er geen initialisatiemethode is). Met de eerste thread voor het voltooien van de initialisatie wordt de waarde van het Lazy<T> exemplaar ingesteld. Dit wordt genoemd |
| ExecutionAndPublication | 2 | Vergrendelingen worden gebruikt om ervoor te zorgen dat slechts één thread een Lazy<T> exemplaar op een threadveilige manier kan initialiseren. In feite wordt de initialisatiemethode uitgevoerd op een threadveilige manier (aangeduid als |
Opmerkingen
Gebruik deze opsomming om de mode parameter van Lazy<T> constructors op te geven. De effecten van alle constructors op threadsynchronisatie kunnen worden beschreven in termen van deze opsomming, ongeacht of ze parameters hebben mode .
Een Lazy<T> exemplaar wordt geïnitialiseerd door een door de gebruiker opgegeven initialisatiemethode of door de parameterloze constructor voor T. De initialisatiemethode wordt opgegeven door de valueFactory parameter van een Lazy<T> constructor. De methode retourneert een instantie van T, het type dat lazily wordt geïnstantieerd door het exemplaar van Lazy<T>. Als een constructor geen parameter heeft valueFactory , wordt de parameterloze constructor gebruikt T om het Lazy<T> exemplaar te initialiseren. In beide gevallen vindt initialisatie plaats de eerste keer dat u de Lazy<T>.Value eigenschap aanroept.
Naast het opgeven van de threadveiligheid van een Lazy<T> exemplaar, is deze opsomming van invloed op het opslaan van uitzonderingen. Wanneer uitzonderingen voor een Lazy<T> exemplaar in de cache worden opgeslagen, krijgt u slechts één kans om het exemplaar te initialiseren. Als er een uitzondering wordt gegenereerd wanneer u de eigenschap voor het eerst aanroept, wordt deze uitzondering in de Lazy<T>.Value cache opgeslagen en opnieuw gegooid bij alle volgende aanroepen naar de Lazy<T>.Value eigenschap. Het voordeel van cachinguitzonderingen is dat twee threads altijd hetzelfde resultaat krijgen, zelfs wanneer er fouten optreden.
Wanneer u de publicatiemodus Oply opgeeft, worden uitzonderingen nooit in de cache opgeslagen. Wanneer u Geen of ExecutionAndPublication opgeeft, is caching afhankelijk van of u een initialisatiemethode opgeeft of de parameterloze constructor toestaat die T moet worden gebruikt. Als u een initialisatiemethode opgeeft, kunt u uitzonderingen in de cache opslaan voor deze twee modi. De initialisatiemethode kan heel eenvoudig zijn. Het kan bijvoorbeeld de parameterloze constructor aanroepen voor T: new Lazy<Contents>(() => new Contents(), mode) in C# of New Lazy(Of Contents)(Function() New Contents()) in Visual Basic. Als u een constructor gebruikt die geen initialisatiemethode opgeeft, worden uitzonderingen die door de parameterloze constructor T worden gegenereerd, niet in de cache opgeslagen. De volgende tabel bevat een overzicht van het cachegedrag van uitzonderingen.
| Mode | Initialisatiemethode gebruiken | Parameterloze constructor gebruiken voor T |
|---|---|---|
| Geen | Cache | Niet in cache opgeslagen |
| PublicatieOnly | Niet in cache opgeslagen | Niet in cache opgeslagen |
| ExecutionAndPublication | Cache | Niet in cache opgeslagen |