HandleInheritability.Inheritable に対する AnonymousPipeServerStream.Dispose の動作
リソースのリークを回避するには、コードで、クライアント ハンドルが子プロセスに渡された後で AnonymousPipeServerStream.DisposeLocalCopyOfClientHandle() メソッドを呼び出す必要があります。 AnonymousPipeServerStream.Dispose
の動作が改善され、ユーザーが DisposeLocalCopyOfClientHandle() を呼び出さない場合、同様のリークが発生する可能性が低くなっています。
以前の動作
AnonymousPipeServerStream インスタンスが所有するクライアント ハンドルは、以前は、ハンドルがまったく公開されていない限り、AnonymousPipeServerStream.Dispose
によって破棄されませんでした。
新しい動作
.NET 8 以降では、AnonymousPipeServerStream.ClientSafePipeHandle プロパティを使用して公開されていない場合、アウトプロセス通信用に作成されたサーバーが所有するクライアント ハンドルは AnonymousPipeServerStream.Dispose
によって破棄されます。 (アウトプロセス通信用のサーバーは、HandleInheritability.Inheritable を AnonymousPipeServerStream(PipeDirection, HandleInheritability) コンストラクターに渡すことで、作成できます)。
導入されたバージョン
.NET 8 Preview 1
破壊的変更の種類
この変更は、動作変更です。
変更理由
この変更は、よくあるリソースのリークを回避するために導入されました。
推奨アクション
アウトプロセス通信用にサーバーを作成した場合は、サーバー インスタンスが破棄された後、GetClientHandleAsString() メソッドを介して、文字列として公開されるクライアント ハンドルを再利用しないでください。
影響を受ける API
- System.IO.Pipes.AnonymousPipeServerStream (具体的には
AnonymousPipeServerStream.Dispose()
)
.NET