CriticalHandle.ReleaseHandle 方法

定义

在派生类中重写时,执行释放句柄所需的代码。

protected:
 abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean

返回

如果句柄释放成功,则为 true;如果出现灾难性故障,则为 false。 在这种情况下,它会生成 releaseHandleFailed 托管调试助手。

注解

如果ReleaseHandle采用适当的同步机制来确保只调用 或 Dispose 方法一次,则保证只调用Close一次方法。 ReleaseHandle如果 IsInvalidIsClosed 属性为 true,则不会调用 方法。 在派生类中 CriticalHandle 实现此方法,以执行释放句柄所需的任何代码。 由于 的一个功能 CriticalHandle 是保证防止资源泄漏,因此 实现 ReleaseHandle 中的代码绝不能失败。 在为同时进行垃圾回收的对象运行正常终结器后,垃圾回收器会调用 ReleaseHandle ,并保证资源调用它,并且它在进行时不会被中断。 此方法将准备为实例构造时 (CER) 约束的执行区域 (,以及其静态可确定的调用图) 中的所有方法。 尽管这可以防止线程中止中断,但你仍必须小心不要在重写 ReleaseHandle 的方法中引入任何错误路径。 具体而言,请将 特性应用于 ReliabilityContractAttributeReleaseHandle调用的任何方法。 在大多数情况下,此代码应为:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

此外,对于简单的清理 (例如,在文件句柄上调用 Windows API CloseHandle) 可以检查单个平台调用的返回值。 对于复杂的清理,你可能有很多程序逻辑和许多方法调用,其中一些调用可能会失败。 必须确保程序逻辑具有针对其中每个情况的回退代码。

ReleaseHandle如果方法出于任何原因返回false,它将生成 releaseHandleFailed 托管调试助手。

适用于

另请参阅