HandleInheritability.Inheritable 的 AnonymousPipeServerStream.Dispose 行为

为避免资源泄漏,代码应在将客户端句柄传递给子进程后调用 AnonymousPipeServerStream.DisposeLocalCopyOfClientHandle() 方法。 AnonymousPipeServerStream.Dispose 的行为已得到改进,降低了未调用 DisposeLocalCopyOfClientHandle() 的用户发生类似泄漏的可能性。

旧行为

以前,AnonymousPipeServerStream.Dispose 不会释放 AnonymousPipeServerStream.DisposeAnonymousPipeServerStream 实例拥有的客户端句柄,除非该句柄完全未公开。

新行为

从 .NET 8 开始,为进程外通信创建的服务器所拥有的客户端句柄如果未通过 AnonymousPipeServerStream.Dispose 属性公开,则由 AnonymousPipeServerStream.ClientSafePipeHandle 释放。 (可通过将 HandleInheritability.Inheritable 传递给 AnonymousPipeServerStream(PipeDirection, HandleInheritability) 构造函数,为进程外通信创建服务器。)

引入的版本

.NET 8 预览版 1

中断性变更的类型

此更改为行为更改

更改原因

引入此项更改是为了避免常见的资源泄漏。

如果服务器是为进程外部通信而创建的,请在释放服务器实例后,不要重复使用通过 GetClientHandleAsString() 方法以字符串形式公开的客户端句柄。

受影响的 API