CriticalHandle.ReleaseHandle Metode

Definisi

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.

Berlaku untuk

Lihat juga