TCPClient 在其 NetworkStream 超出范围后会发生什么情况?它被处置了吗?
What happens with TCPClient after its NetworkStream is passed out of scope? is it disposed?
我想知道当我第一次在函数范围内创建一个 TCPClient
,从中提取 NetworkStream
,将其传递给 class 的 c-tor 时会发生什么return新建对象:
{
TcpClient client = new TcpClient();
await client.ConnectAsync(host, outport).ConfigureAwait(false);
NetworkStream stream = client.GetStream();
TCPWrapperAdapterWithStream adapter = new TCPWrapperAdapterWithStream(stream, stream, 100);
return adapter;
}
离开上下文后客户端会发生什么? Stream 还会继续工作吗?
我可以这样做还是必须“保留”TCPClient
对象?
如果您继续使用 TCPClient,它就会开始抛出。当我发现 SSLStream 在 Dispose 中无缘无故抛出时,我最终提交了一个错误,因为它调用了 TCPClient.Flush() ,它在 NetworkStream 死了时抛出。
(我需要立即关闭 SSLStream,因为我知道它已经死了,如果以正常方式关闭,它会在失败之前阻塞几秒钟,所以我尝试了这个。)
另一方面,TCPClient 将尝试在终结器中处理其 NetworkStream。我很久以前就被这个咬过。
我想知道当我第一次在函数范围内创建一个 TCPClient
,从中提取 NetworkStream
,将其传递给 class 的 c-tor 时会发生什么return新建对象:
{
TcpClient client = new TcpClient();
await client.ConnectAsync(host, outport).ConfigureAwait(false);
NetworkStream stream = client.GetStream();
TCPWrapperAdapterWithStream adapter = new TCPWrapperAdapterWithStream(stream, stream, 100);
return adapter;
}
离开上下文后客户端会发生什么? Stream 还会继续工作吗?
我可以这样做还是必须“保留”TCPClient
对象?
如果您继续使用 TCPClient,它就会开始抛出。当我发现 SSLStream 在 Dispose 中无缘无故抛出时,我最终提交了一个错误,因为它调用了 TCPClient.Flush() ,它在 NetworkStream 死了时抛出。
(我需要立即关闭 SSLStream,因为我知道它已经死了,如果以正常方式关闭,它会在失败之前阻塞几秒钟,所以我尝试了这个。)
另一方面,TCPClient 将尝试在终结器中处理其 NetworkStream。我很久以前就被这个咬过。