【发布时间】:2012-08-01 15:23:36
【问题描述】:
我有一个在 FTP 服务器之间移动文件的文件传输应用程序。与任何时候一样,我们可以在移动中拥有数十个文件。为了防止 FTP 服务器泛滥,我有一个监视器和信号量锁系统。
根据调用堆栈,我的 FTP 客户端经常在 System.Net.Sockets.Socket.Receive() 内的某个地方冻结。我没有得到例外,所以无法处理这个问题。我想取消线程,因为它阻塞了其他想要使用 FTP 客户端的线程。
我考虑过在一个新线程中启动最终调用 System.Net.Sockets.Socket.Receive() 的方法,并在一段时间后中止线程,但我担心在线程之后套接字将保持打开状态中止。有没有更优雅的方法在非响应线程之后杀死和清理?
【问题讨论】:
-
谢谢,但这不是我的问题。
-
我认为线程中止根本不安全。
-
在底层
Socket上调用Shutdown。这将导致线程出错。 -
@DavidSchwartz 说了什么,以及为什么只有一个 FTP 客户端?为什么每个线程不能有自己的?
标签: c# multithreading