LazyThreadSafetyMode Enum
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger hur en Lazy<T> instans synkroniserar åtkomst mellan flera trådar.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Arv
Fält
| Name | Värde | Description |
|---|---|---|
| None | 0 | Instansen Lazy<T> är inte trådsäker. Om instansen nås från flera trådar är dess beteende odefinierat. Använd endast det här läget när höga prestanda är avgörande och instansen Lazy<T> garanterat aldrig initieras från mer än en tråd. Om du använder en Lazy<T> konstruktor som anger en initieringsmetod ( |
| PublicationOnly | 1 | När flera trådar försöker initiera en Lazy<T> instans samtidigt tillåts alla trådar att köra initieringsmetoden (eller den parameterlösa konstruktorn om det inte finns någon initieringsmetod). Den första tråden för att slutföra initieringen anger värdet för instansen Lazy<T> . Detta kallas i |
| ExecutionAndPublication | 2 | Lås används för att säkerställa att endast en enda tråd kan initiera en Lazy<T> instans på ett trådsäkert sätt. I praktiken körs initieringsmetoden på ett trådsäkert sätt (kallas |
Kommentarer
Använd den här uppräkningen för att ange parametern modeLazy<T> för konstruktorer. Effekterna av alla konstruktorer på trådsynkronisering kan beskrivas i termer av den här uppräkningen, oavsett om de har mode parametrar eller inte.
En Lazy<T> instans initieras antingen av en användardefinerad initieringsmetod eller av den parameterlösa konstruktorn för T. Initieringsmetoden anges av parametern för valueFactory en Lazy<T> konstruktor. Metoden returnerar en instans av T, som är den typ som lättsinnigt instansieras av instansen av Lazy<T>. Om en konstruktor inte har någon valueFactory parameter används den parameterlösa konstruktorn för för T att initiera instansen Lazy<T> . I båda fallen sker initieringen första gången du anropar Lazy<T>.Value egenskapen.
Förutom att ange trådsäkerheten för en Lazy<T> instans påverkar den här uppräkningen undantagscachelagring. När undantag cachelagras för en Lazy<T> instans får du bara en chans att initiera instansen. Om ett undantag utlöses första gången du anropar Lazy<T>.Value egenskapen cachelagras undantaget och ändras vid alla efterföljande anrop till Lazy<T>.Value egenskapen. Fördelen med cachelagringsfel är att två trådar alltid får samma resultat, även när fel inträffar.
När du anger läget PublicationOnly cachelagras aldrig undantag. När du anger Ingen eller ExecutionAndPublication beror cachelagring på om du anger en initieringsmetod eller tillåter att den parameterlösa konstruktorn används T . Om du anger en initieringsmetod kan du cachelagra undantag för dessa två lägen. Initieringsmetoden kan vara mycket enkel. Den kan till exempel anropa den parameterlösa konstruktorn för T: new Lazy<Contents>(() => new Contents(), mode) i C#, eller New Lazy(Of Contents)(Function() New Contents()) i Visual Basic. Om du använder en konstruktor som inte anger någon initieringsmetod cachelagras inte undantag som genereras av den parameterlösa konstruktorn för T . I följande tabell sammanfattas beteendet för cachelagring av undantag.
| Mode | Använda initieringsmetod | Använda parameterlös konstruktor för T |
|---|---|---|
| Ingen | Cachelagrade | Inte cachelagrad |
| PublikationOnly | Inte cachelagrad | Inte cachelagrad |
| ExecutionAndPublication | Cachelagrade | Inte cachelagrad |