LazyThreadSafetyMode Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan bagaimana instans Lazy<T> menyinkronkan akses di antara beberapa utas.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Warisan
Bidang
| Nama | Nilai | Deskripsi |
|---|---|---|
| None | 0 |
Lazy<T> Instans tidak aman utas; jika instans diakses dari beberapa utas, perilakunya tidak terdefinisi. Gunakan mode ini hanya ketika performa tinggi sangat penting dan instans dijamin Lazy<T> tidak akan pernah diinisialisasi dari lebih dari satu utas. Jika Anda menggunakan Lazy<T> konstruktor yang menentukan metode inisialisasi ( |
| PublicationOnly | 1 | Ketika beberapa utas mencoba menginisialisasi Lazy<T> instans secara bersamaan, semua utas diizinkan untuk menjalankan metode inisialisasi (atau konstruktor tanpa parameter, jika tidak ada metode inisialisasi). Utas pertama untuk menyelesaikan inisialisasi menetapkan nilai Lazy<T> instans. Ini disebut sebagai |
| ExecutionAndPublication | 2 | Kunci digunakan untuk memastikan bahwa hanya satu utas yang dapat menginisialisasi instans dengan Lazy<T> cara yang aman untuk utas. Secara efektif, metode inisialisasi dijalankan dengan cara yang aman utas (disebut sebagai |
Keterangan
Gunakan enumerasi ini untuk menentukan mode parameter Lazy<T> konstruktor. Efek dari semua konstruktor pada sinkronisasi utas dapat dijelaskan dalam hal enumerasi ini, apakah mereka memiliki mode parameter atau tidak.
Lazy<T> Instans diinisialisasi baik oleh metode inisialisasi yang ditentukan pengguna atau oleh konstruktor tanpa parameter untuk T. Metode inisialisasi ditentukan oleh valueFactory parameter Lazy<T> konstruktor. Metode mengembalikan instans T, yang merupakan jenis yang diinstansiasi dengan malas oleh instans Lazy<T>. Jika konstruktor tidak memiliki valueFactory parameter, konstruktor tanpa parameter untuk T digunakan untuk menginisialisasi Lazy<T> instans. Dalam kedua kasus, inisialisasi terjadi saat pertama kali Anda memanggil Lazy<T>.Value properti.
Selain menentukan keamanan Lazy<T> utas instans, enumerasi ini memengaruhi penembolokan pengecualian. Ketika pengecualian di-cache untuk Lazy<T> instans, Anda hanya mendapatkan satu kesempatan untuk menginisialisasi instans. Jika pengecualian dilemparkan saat pertama kali Anda memanggil properti , pengecualian tersebut Lazy<T>.Value di-cache dan ditumbuhi kembali pada semua panggilan berikutnya ke Lazy<T>.Value properti . Keuntungan dari pengecualian penembolokan adalah bahwa dua utas selalu mendapatkan hasil yang sama, bahkan ketika kesalahan terjadi.
Saat Anda menentukan mode PublicationOnly, pengecualian tidak pernah di-cache. Saat Anda menentukan None atau ExecutionAndPublication, penembolokan tergantung pada apakah Anda menentukan metode inisialisasi atau mengizinkan konstruktor tanpa parameter untuk T digunakan. Mengatur metode inisialisasi memungkinkan pencachingan pengecualian untuk kedua mode ini. Metode inisialisasi bisa sangat sederhana. Misalnya, ini mungkin memanggil konstruktor tanpa parameter untuk T: new Lazy<Contents>(() => new Contents(), mode) di C#, atau New Lazy(Of Contents)(Function() New Contents()) di Visual Basic. Jika Anda menggunakan konstruktor yang tidak menentukan metode inisialisasi, pengecualian yang dilemparkan oleh konstruktor tanpa parameter untuk T tidak di-cache. Tabel berikut ini meringkas perilaku penembolokan pengecualian.
| Modus | Menggunakan metode inisialisasi | Menggunakan konstruktor tanpa parameter untuk T |
|---|---|---|
| Tidak | Cache | Tidak di-cache |
| PublicationOnly | Tidak di-cache | Tidak di-cache |
| ExecutionAndPublication | Cache | Tidak di-cache |