CriticalHandle.ReleaseHandle 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在衍生類別中覆寫時,執行釋放控制代碼所需的程式碼。
protected:
abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean
傳回
如果成功釋放控制代碼,則為 true
;如果發生嚴重失敗的事件,則為 false
。 在這種情況下,它會產生 releaseHandleFailed Managed 偵錯助理。
備註
ReleaseHandle前提是您採用適當的同步處理機制,以確保只會呼叫 或方法一次,以確保只會呼叫 Close 或 Dispose 方法。
ReleaseHandle如果 IsInvalid 或 IsClosed 屬性為 true
,則不會呼叫 方法。 在您的 CriticalHandle 衍生類別中實作這個方法,以執行釋放句柄所需的任何程序代碼。 因為的其中一個功能 CriticalHandle 是保證資源外洩,所以 實 ReleaseHandle 作中的程式代碼絕對不能失敗。 在一般完成項執行一般完成項之後,垃圾收集行程 ReleaseHandle 會呼叫同時收集的物件,並保證資源叫用它,而且在進行中時不會中斷。 這個方法將會在實例建構時間 (以及其靜態可判斷呼叫圖形中的所有方法,準備為條件約束的執行區域 (CER) ) 。 雖然這可防止線程中止中斷,但您仍然必須小心不要在覆寫 ReleaseHandle 的 方法中導入任何錯誤路徑。 特別是,將 ReliabilityContractAttribute 屬性套用至您從 ReleaseHandle呼叫的任何方法。 在大部分情況下,此程式代碼應該是:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
此外,若要簡單清除 (例如,在檔句柄上呼叫 Windows API CloseHandle
) 您可以檢查單一平台調用呼叫的傳回值。 針對複雜的清除,您可能會有許多程式邏輯和許多方法呼叫,其中有些可能會失敗。 您必須確定程式邏輯具有每個案例的後援程序代碼。
ReleaseHandle如果方法因任何原因而傳回false
,它會產生 releaseHandleFailed Managed 偵錯小幫手。