Bagikan melalui


RouteCollection.GetReadLock Metode

Definisi

Menyediakan objek untuk mengelola keamanan utas saat Anda mengambil objek dari koleksi.

public:
 IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable

Mengembalikan

Objek yang mengelola keamanan utas.

Contoh

Contoh berikut menunjukkan cara menggunakan GetReadLock metode saat Anda mengambil rute saat aplikasi berjalan. Pernyataan ini Using memastikan bahwa apa pun yang terjadi pada durasi ketika Anda membaca dari koleksi (apakah kode selesai secara normal atau pengecualian dilemparkan) kunci akan dilepaskan dengan aman di akhir Using blok kode.

Keterangan

Objek RouteCollection tersedia untuk beberapa proses dalam aplikasi. Oleh karena itu, jika Anda harus mengambil rute saat aplikasi berjalan, gunakan GetReadLock metode untuk menjamin keamanan utas. Dengan mendapatkan kunci baca pada koleksi rute, Anda memastikan bahwa koleksi tidak akan dimodifikasi saat Anda mencoba mengambilnya.

Metode GetReadLock ini menghentikan utas agar tidak berlanjut sampai kunci dapat diperoleh. Jika kunci tulis di tempat, utas menunggu hingga pembaruan selesai dan kunci tulis dilepaskan. Kunci baca pada koleksi rute dirilis ketika IDisposable objek yang dikembalikan oleh metode ini dibuang.

Jika Anda tidak menggunakan GetReadLock, Anda mungkin mendapatkan kesalahan saat membaca koleksi RouteCollection . Misalnya, Anda mengulangi objek dalam RouteCollection koleksi untuk membacanya, tanpa memanggil GetReadLock. Saat Anda melakukan itu, utas lain dari permintaan lain mungkin memanggil GetWriteLock dan menambahkan rute ke koleksi. Utas pertama kemudian akan gagal dengan kesalahan.

Ada dua skenario di mana Anda tidak perlu memanggil GetReadLock:

  • Metode RouteCollection publik kelas seperti GetVirtualPath dan GetRouteData panggil GetReadLock secara internal. Oleh karena itu, Anda tidak perlu secara eksplisit memanggil GetReadLock ketika Anda memanggil metode RouteCollection publik kelas untuk mengambil data dari koleksi.

  • Ketika aplikasi dimulai dan belum memproses permintaan, seperti di penanganan Application_Start aktivitas, hanya satu utas yang berjalan. Karena tidak ada utas lain yang mungkin memperbarui koleksi saat Anda membacanya, Anda tidak perlu memanggil GetReadLock.

Berlaku untuk

Lihat juga