LazyThreadSafetyMode Enumeráció
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Meghatározza, hogy egy Lazy<T> példány hogyan szinkronizálja a hozzáférést több szál között.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Öröklődés
Mezők
| Name | Érték | Description |
|---|---|---|
| None | 0 | A Lazy<T> példány nem szálbiztos; ha a példány több szálból érhető el, a viselkedése nem definiált. Ezt a módot csak akkor használja, ha a nagy teljesítmény kritikus fontosságú, és a Lazy<T> példány garantáltan soha nem inicializálható több szálból. Ha inicializálási metódust (Lazy<T>paramétert) meghatározó konstruktort |
| PublicationOnly | 1 | Ha több szál egyszerre próbál inicializálni egy példányt Lazy<T> , minden szál futtathatja az inicializálási módszert (vagy paraméter nélküli konstruktort, ha nincs inicializálási módszer). Az inicializálás első szála beállítja a Lazy<T> példány értékét. Ezt nevezik |
| ExecutionAndPublication | 2 | A zárolásokkal biztosítható, hogy csak egyetlen szál inicializáljon egy Lazy<T> példányt szálbiztos módon. Az inicializálási módszer gyakorlatilag szálbiztos módon (a mezőnévben) |
Megjegyzések
Ezzel az enumerálással adja meg a mode konstruktorok paraméterét Lazy<T> . Az összes konstruktor szálszinkronizálásra gyakorolt hatását e számbavétel szempontjából lehet leírni, függetlenül attól, hogy vannak-e mode paramétereik.
A Lazy<T> példányokat egy felhasználó által megadott inicializálási módszerrel vagy a paraméter nélküli konstruktor Tinicializálja. Az inicializálási módszert egy valueFactoryLazy<T> konstruktor paramétere határozza meg. A metódus egy példányt Tad vissza, amely a példány Lazy<T>által lazán példányosított típus. Ha egy konstruktor nem rendelkezik paraméterrel valueFactory , a példány inicializálásához TLazy<T> a paraméter nélküli konstruktor használható. Mindkét esetben az inicializálás a tulajdonság első hívásakor Lazy<T>.Value történik.
A példány szálbiztonságának Lazy<T> megadása mellett ez a számbavétel a kivétel gyorsítótárazására is hatással van. Ha egy Lazy<T> példány kivételei gyorsítótárazva vannak, csak egy esélyt kap a példány inicializálására. Ha a tulajdonság első hívásakor Lazy<T>.Value kivétel történik, a rendszer gyorsítótárazza és újrakezdi a kivételt a Lazy<T>.Value tulajdonság minden további hívása esetén. A gyorsítótárazási kivételek előnye, hogy minden két szál mindig ugyanazt az eredményt kapja, még akkor is, ha hibák történnek.
A PublicationOnly mód megadásakor a kivételek soha nem lesznek gyorsítótárazva. A Nincs vagy a ExecutionAndPublication megadásakor a gyorsítótárazás attól függ, hogy inicializálási módszert ad-e meg, vagy engedélyezi-e a paraméter nélküli konstruktor T használatát. Az inicializálási módszer megadása lehetővé teszi a kivételek gyorsítótárazását a két üzemmódban. Az inicializálási módszer nagyon egyszerű lehet. Például meghívhatja a paraméter nélküli konstruktort ehhez: T: new Lazy<Contents>(() => new Contents(), mode) C#-ben, vagy New Lazy(Of Contents)(Function() New Contents()) Visual Basic-ben. Ha olyan konstruktort használ, amely nem ad meg inicializálási módszert, a paraméter nélküli konstruktor T által generált kivételek nem lesznek gyorsítótárazva. Az alábbi táblázat a kivétel gyorsítótárazási viselkedését foglalja össze.
| Üzemmód | Inicializálási módszer használata | Paraméter nélküli konstruktor használata T |
|---|---|---|
| None | Gyorsítótárazott | Nincs gyorsítótárazva |
| PublicationOnly | Nincs gyorsítótárazva | Nincs gyorsítótárazva |
| ExecutionAndPublication | Gyorsítótárazott | Nincs gyorsítótárazva |