【发布时间】:2016-02-13 12:34:28
【问题描述】:
为了更好地理解 .NET 网络部分的工作原理,我将浏览 TcpListener(Documentation, Reference Source) 类的参考源。引起我注意的是它拥有实现 IDisposable (Socket) 的对象,但它本身并不实现 IDisposable。这是有原因的吗?
【问题讨论】:
-
IMO,没有这样的原因。只是开发者的失败。
-
TcpListener 是一个帮助类,旨在简化 TCP 服务器的实现。 IDisposable 从来没有让任何事情变得简单。不配置套接字不是一个严重的问题,它使用很少的系统资源。它的终结器可以很好地完成这项工作。尤其是在适合 TcpListener 的简单场景中,这种程序只创建一次侦听器并让它在进程的生命周期中存在。功能,而不是错误。
-
@HansPassant:未能处理套接字可能会导致托管套接字的任何远端机器上的资源消耗过多。如果该远端机器是小型嵌入式微型计算机,则在终结器运行或其网络套接字超时之前,它的实用性可能会受到严重影响。
-
那是无意义的 FUD,使用 Stop() 方法。
标签: c# .net tcp idisposable tcplistener