ReaderWriterLockSlim.EnterReadLock Metode
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.
Mencoba memasukkan kunci dalam mode baca.
public:
void EnterReadLock();
public void EnterReadLock();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Pengecualian
Properti RecursionPolicy adalah NoRecursion, dan utas saat ini telah mencoba untuk memperoleh kunci baca ketika sudah memegang kunci baca.
-atau-
Properti RecursionPolicy adalah NoRecursion, dan utas saat ini telah mencoba untuk memperoleh kunci baca ketika sudah memegang kunci tulis.
-atau-
Jumlah rekursi akan melebihi kapasitas penghitung. Batas ini sangat besar sehingga aplikasi tidak boleh mengalami pengecualian ini.
Objek ReaderWriterLockSlim telah dibuang.
Contoh
Contoh berikut menunjukkan cara menggunakan EnterReadLock metode untuk memasukkan kunci dalam mode baca. Metode yang ditunjukkan dalam contoh mengambil nilai yang terkait dengan kunci. Jika kunci tidak ditemukan, pengecualian yang dilemparkan oleh bagian dalam Dictionary<TKey,TValue> diizinkan untuk mengakhiri metode .
finally Blok digunakan untuk menjalankan ExitReadLock metode , memastikan bahwa pemanggil keluar dari mode baca.
Kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk ReaderWriterLockSlim kelas .
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public string Read(int key)
{
cacheLock.EnterReadLock();
try
{
return innerCache[key];
}
finally
{
cacheLock.ExitReadLock();
}
}
Public Function Read(ByVal key As Integer) As String
cacheLock.EnterReadLock()
Try
Return innerCache(key)
Finally
cacheLock.ExitReadLock()
End Try
End Function
Keterangan
Metode ini memblokir hingga utas panggilan memasuki kunci, dan karenanya mungkin tidak pernah kembali. TryEnterReadLock Gunakan metode untuk memblokir interval tertentu, lalu kembalikan jika utas panggilan belum memasuki mode baca selama interval tersebut.
Beberapa utas dapat memasuki mode baca secara bersamaan.
Jika satu atau beberapa utas menunggu untuk memasuki mode tulis, utas yang memanggil blok metode sampai utas tersebut EnterReadLock telah kehabisan waktu atau memasuki mode tulis lalu keluar darinya.
Note
Jika kunci memungkinkan rekursi, utas yang telah memasuki kunci dalam mode baca dapat memasuki mode baca secara rekursif, bahkan jika utas lain menunggu untuk memasuki mode tulis.
Paling banyak satu utas dapat berada dalam mode yang dapat ditingkatkan sementara utas lain dalam mode baca. Jika utas tambahan menunggu untuk memasuki mode yang dapat ditingkatkan, dan tidak ada utas yang menunggu untuk memasuki mode tulis, utas yang memanggil EnterReadLock metode segera memasuki mode baca dan tidak memblokir.