HandleInheritability.Inheritable に対する AnonymousPipeServerStream.Dispose の動作

リソースのリークを回避するには、コードで、クライアント ハンドルが子プロセスに渡された後で AnonymousPipeServerStream.DisposeLocalCopyOfClientHandle() メソッドを呼び出す必要があります。 AnonymousPipeServerStream.Dispose の動作が改善され、ユーザーが DisposeLocalCopyOfClientHandle() を呼び出さない場合、同様のリークが発生する可能性が低くなっています。

以前の動作

AnonymousPipeServerStream インスタンスが所有するクライアント ハンドルは、以前は、ハンドルがまったく公開されていない限り、AnonymousPipeServerStream.Dispose によって破棄されませんでした。

新しい動作

.NET 8 以降では、AnonymousPipeServerStream.ClientSafePipeHandle プロパティを使用して公開されていない場合、アウトプロセス通信用に作成されたサーバーが所有するクライアント ハンドルは AnonymousPipeServerStream.Dispose によって破棄されます。 (アウトプロセス通信用のサーバーは、HandleInheritability.InheritableAnonymousPipeServerStream(PipeDirection, HandleInheritability) コンストラクターに渡すことで、作成できます)。

導入されたバージョン

.NET 8 Preview 1

破壊的変更の種類

この変更は、動作変更です。

変更理由

この変更は、よくあるリソースのリークを回避するために導入されました。

アウトプロセス通信用にサーバーを作成した場合は、サーバー インスタンスが破棄された後、GetClientHandleAsString() メソッドを介して、文字列として公開されるクライアント ハンドルを再利用しないでください。

影響を受ける API