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 托管调试助手。
注解
如果ReleaseHandle采用适当的同步机制来确保只调用 或 Dispose 方法一次,则保证只调用Close一次方法。 ReleaseHandle如果 IsInvalid 或 IsClosed 属性为 true
,则不会调用 方法。 在派生类中 CriticalHandle 实现此方法,以执行释放句柄所需的任何代码。 由于 的一个功能 CriticalHandle 是保证防止资源泄漏,因此 实现 ReleaseHandle 中的代码绝不能失败。 在为同时进行垃圾回收的对象运行正常终结器后,垃圾回收器会调用 ReleaseHandle ,并保证资源调用它,并且它在进行时不会被中断。 此方法将准备为实例构造时 (CER) 约束的执行区域 (,以及其静态可确定的调用图) 中的所有方法。 尽管这可以防止线程中止中断,但你仍必须小心不要在重写 ReleaseHandle 的方法中引入任何错误路径。 具体而言,请将 特性应用于 ReliabilityContractAttribute 从 ReleaseHandle调用的任何方法。 在大多数情况下,此代码应为:
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
此外,对于简单的清理 (例如,在文件句柄上调用 Windows API CloseHandle
) 可以检查单个平台调用的返回值。 对于复杂的清理,你可能有很多程序逻辑和许多方法调用,其中一些调用可能会失败。 必须确保程序逻辑具有针对其中每个情况的回退代码。
ReleaseHandle如果方法出于任何原因返回false
,它将生成 releaseHandleFailed 托管调试助手。
适用于
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈