C# TCPClient的网络流超出范围后会发生什么情况?处理好了吗?

C# TCPClient的网络流超出范围后会发生什么情况?处理好了吗?,c#,tcpclient,networkstream,C#,Tcpclient,Networkstream,我想知道当我第一次在函数范围内创建TCPClient时会发生什么,从中提取NetworkStream,将其传递给类的c-tor并返回新创建的对象: { TcpClient client = new TcpClient(); await client.ConnectAsync(host, outport).ConfigureAwait(false); NetworkStream stream = client.GetStream(); TCPWrapperAdapt

我想知道当我第一次在函数范围内创建
TCPClient
时会发生什么,从中提取
NetworkStream
,将其传递给类的c-tor并返回新创建的对象:

{
    TcpClient client = new TcpClient();
    await client.ConnectAsync(host, outport).ConfigureAwait(false);
    NetworkStream stream = client.GetStream();
    TCPWrapperAdapterWithStream adapter = new TCPWrapperAdapterWithStream(stream, stream, 100);
    return adapter;
}
离开上下文后,客户端会发生什么?这条流还能工作吗?
我可以这样做吗?还是必须“保留”
TCPClient
对象?

如果您继续使用它,TCPClient将开始抛出。当我在Dispose中发现SSLStream无缘无故抛出时,我最终提交了一个bug,因为它调用了TCPClient.Flush(),在NetworkStream死机时抛出

(我需要立即关闭SSLStream,因为我知道它已经死了,如果以正常方式关闭,它会在失败之前阻塞几秒钟,所以我尝试了这个。)


另一方面,TCPClient将尝试在终结器中处理其网络流。我很久以前就被这个问题困扰过。

你在调试程序时遇到问题了吗?令人惊讶的是没有。但是怎么可能呢?嗯。。这有点超出了我的知识和专业知识,但实际上可以归结为GC跟踪
NetworkStream
type实例上的行为,以及它在应用程序(或其他功能范围)中的引用\使用情况。我认为,如果适配器被持久化,TCPClient将在这里持久化,因为回收它似乎有问题——但我不确定。但我不再使用TCPClient,只使用它的网络流。@MichaelW:那么终结器讨厌你的内脏。