如何阻止非响应的线程

Ric*_*363 5 c# multithreading

我有一个文件传输应用程序在FTP服务器之间移动文件.任何时候我们都可以在移动中拥有数十个文件.为了防止泛滥FTP服务器,我有一个监视器和信号量锁系统.

我的FTP客户端经常根据调用堆栈冻结在System.Net.Sockets.Socket.Receive()内的某个地方.我没有得到例外,所以无法解决问题.我想取消该线程,因为它阻止了其他想要使用FTP客户端的线程.

我已经考虑启动最终在新线程中调用System.Net.Sockets.Socket.Receive()并在一段时间后中止线程的方法,但我担心在线程中止后套接字将保持打开状态.在没有响应的线程之后,有更优雅的方法来杀死和清理吗?

Rom*_*jev 0

我建议在单独的进程中运行您的线程(如果可能)并无情地杀死它。然后操作系统将释放所有资源