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