Do comportamento AnonymousPipeServerStream.Dispose para o HandleInheritability.Inheritable
Para evitar vazamentos de recursos, o código deve chamar o método AnonymousPipeServerStream.DisposeLocalCopyOfClientHandle() depois de passar o identificador do cliente para o processo filho. O comportamento AnonymousPipeServerStream.Dispose
foi aprimorado para diminuir a chance de vazamentos semelhantes para usuários que não chamam DisposeLocalCopyOfClientHandle().
Comportamento anterior
Antes, o identificador do cliente pertencente à instância AnonymousPipeServerStream não era descartado por AnonymousPipeServerStream.Dispose
, a menos que o identificador não fosse exposto.
Novo comportamento
Do .NET 8 em diante, o identificador do cliente pertencente a um servidor que foi criado para comunicação fora do processo será descartado por AnonymousPipeServerStream.Dispose
se não for exposto usando a propriedade AnonymousPipeServerStream.ClientSafePipeHandle. (Você cria um servidor para comunicação fora do processo passando HandleInheritability.Inheritable para o construtor AnonymousPipeServerStream(PipeDirection, HandleInheritability)).
Versão introduzida
.NET 8 versão prévia 1
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Esta alteração foi introduzida para evitar um vazamento de recurso comum.
Ação recomendada
Se um servidor for criado para comunicação fora do processo, não reutilize o identificador do cliente exposto como uma cadeia de caracteres por meio do método GetClientHandleAsString() depois que a instância do servidor for descartada.
APIs afetadas
- System.IO.Pipes.AnonymousPipeServerStream (especificamente,
AnonymousPipeServerStream.Dispose()
)