我有一个在 FTP 服务器之间移动文件的文件传输应用程序。与任何时候一样,我们可以在移动中拥有数十个文件。为了防止 FTP 服务器泛滥,我有一个监视器和信号量锁系统。
根据调用堆栈,我的 FTP 客户端每隔一段时间就会在 System.Net.Sockets.Socket.Receive() 的某个地方冻结。我没有得到例外,所以无法处理这个问题。我想取消线程,因为它阻塞了其他想要使用 FTP 客户端的线程。
我考虑过在新线程中启动最终调用 System.Net.Sockets.Socket.Receive() 的方法并在一段时间后中止线程,但我担心在线程中止后套接字将保持打开状态。在非响应线程之后,是否有更优雅的方式来杀死和清理?