【发布时间】:2012-08-28 01:17:30
【问题描述】:
我有一堆文件要使用 C# 传输到单个 FTP 服务器,其中 FtpWebRequest 对象用 BackgroundWorker 包装。这是一对一的关系。因此,对于每个 FtpWebRequest,都有一个 BackgroundWorker 来完成这项工作。我解雇了其中几个 BackgroundWorker 以发送我想要的所有文件。
问题是它被击中或错过。有时所有文件都被传输,有时有些文件丢失。
目前我正在使用一种解决方法来检查文件是否存在于服务器上,如果不存在,我会尝试再次发送它。这行得通,但我觉得这是真正问题的绷带。
Stackoverflow...您认为这里有什么问题?
谢谢!
【问题讨论】:
-
我通常不使用 BackgroundWorker,而是倾向于使用线程、任务或 ThreadPool,所以我不确切知道,但我的想法是,您是否尝试附加到 RunWorkerCompleted 事件并验证A)所有的工人都完成了,B)他们没有失败?您可能会遇到这样的情况,即 FTP 让它们全部快速运行并拒绝某些作为垃圾邮件节流技术,或者当您一次快速触发多个网络请求时可能会发生其他此类问题。我也不熟悉 FtpWebRequest,但是可以绑定多个请求以使用一个连接吗?
-
@JimmyHoffa 关于限制可能是正确的,或者您的请求在服务器发回“OK”状态之前进入,或者您试图打开比服务器允许的更多的套接字。我曾经有一个类似的问题,一个 PHP 脚本从服务器下载所有新文件,它甚至不是多线程的。您需要检查 FtpWebResponses 的 StatusCode 和 StatusDescription 属性——有许多不成功的条件不会抛出。
-
@JimmyHoffa,请将您的评论作为答案,以便我投票
标签: c# multithreading ftp backgroundworker ftpwebrequest