HandleInheritability.Inheritable 的 AnonymousPipeServerStream.Dispose 行为
为避免资源泄漏,代码应在将客户端句柄传递给子进程后调用 AnonymousPipeServerStream.DisposeLocalCopyOfClientHandle() 方法。 AnonymousPipeServerStream.Dispose
的行为已得到改进,降低了未调用 DisposeLocalCopyOfClientHandle() 的用户发生类似泄漏的可能性。
旧行为
以前,AnonymousPipeServerStream.Dispose
不会释放 AnonymousPipeServerStream.Dispose
AnonymousPipeServerStream 实例拥有的客户端句柄,除非该句柄完全未公开。
新行为
从 .NET 8 开始,为进程外通信创建的服务器所拥有的客户端句柄如果未通过 AnonymousPipeServerStream.Dispose
属性公开,则由 AnonymousPipeServerStream.ClientSafePipeHandle 释放。 (可通过将 HandleInheritability.Inheritable 传递给 AnonymousPipeServerStream(PipeDirection, HandleInheritability) 构造函数,为进程外通信创建服务器。)
引入的版本
.NET 8 预览版 1
中断性变更的类型
此更改为行为更改。
更改原因
引入此项更改是为了避免常见的资源泄漏。
建议的操作
如果服务器是为进程外部通信而创建的,请在释放服务器实例后,不要重复使用通过 GetClientHandleAsString() 方法以字符串形式公开的客户端句柄。
受影响的 API
- System.IO.Pipes.AnonymousPipeServerStream(具体而言,
AnonymousPipeServerStream.Dispose()
)