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

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

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

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

适用于

另请参阅