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()
)