微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TCPClient 的 NetworkStream 超出范围后会发生什么?处理了吗?

如何解决TCPClient 的 NetworkStream 超出范围后会发生什么?处理了吗?

我想知道当我第一次在函数作用域内创建 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 就会开始抛出。当我发现 SSLStream 在 Dispose 中无缘无故抛出时,我最终提交了一个错误,因为它调用了 TCPClient.Flush(),当 NetworkStream 死了时抛出。

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

另一方面,TCPClient 将尝试在终结器中处理其 NetworkStream。我很久以前就被这个咬了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。