CriticalHandle.ReleaseHandle 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.
Ketika ditimpa di kelas turunan, jalankan kode yang diperlukan untuk membebaskan handel.
protected:
abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean
Mengembalikan
true
jika handel berhasil dilepaskan; jika tidak, jika terjadi kegagalan bencana, false
. Dalam hal ini, ini menghasilkan Asisten Debugging Terkelola releaseHandleFailed .
Keterangan
Metode ReleaseHandle ini dijamin hanya dipanggil sekali, asalkan Anda menggunakan mekanisme sinkronisasi yang tepat untuk memastikan bahwa hanya satu panggilan ke Close metode atau Dispose yang dilakukan. Metode ReleaseHandle tidak akan dipanggil jika IsInvalid properti atau IsClosed adalah true
. Terapkan metode ini di kelas turunan Anda CriticalHandle untuk menjalankan kode apa pun yang diperlukan untuk membebaskan handel. Karena salah satu fungsinya CriticalHandle adalah menjamin pencegahan kebocoran sumber daya, kode dalam implementasi ReleaseHandle Anda tidak boleh gagal. Pengumpul sampah memanggil ReleaseHandle setelah finalizer normal dijalankan untuk objek yang dikumpulkan sampah pada saat yang sama, dan menjamin sumber daya untuk memanggilnya dan bahwa itu tidak akan terganggu saat sedang berlangsung. Metode ini akan disiapkan sebagai wilayah eksekusi yang dibatasi (CER) pada waktu konstruksi instans (bersama dengan semua metode dalam grafik panggilan yang dapat ditentukan secara statis). Meskipun hal ini mencegah gangguan pembatalakuan utas, Anda harus tetap berhati-hati untuk tidak memperkenalkan jalur kesalahan apa pun dalam metode yang ditimpa ReleaseHandle . Secara khusus, terapkan atribut ke ReliabilityContractAttribute metode apa pun yang Anda panggil dari ReleaseHandle. Dalam kebanyakan kasus, kode ini harus:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
Selain itu, untuk pembersihan sederhana (misalnya, memanggil Windows API CloseHandle
pada handel file) Anda dapat memeriksa nilai pengembalian untuk satu panggilan pemanggilan platform. Untuk pembersihan yang kompleks, Anda mungkin memiliki banyak logika program dan banyak panggilan metode, beberapa di antaranya mungkin gagal. Anda harus memastikan bahwa logika program Anda memiliki kode fallback untuk setiap kasus tersebut.
ReleaseHandle Jika metode kembali false
karena alasan apa pun, metode menghasilkan Asisten Debugging Terkelola releaseHandleFailed.