问题描述
我正在使用最新的 FluentFTP,并且正在尝试实现并行上传功能。
问题是某些连接抛出异常并显示“无法创建套接字”消息,并且我在失败的文件上看不到任何特定模式。
private List<string> ParallelUpload(string dir,string ftpPath,int maxConnections,FtpRemoteExists existsMode,FtpVerify verifyOptions) {
Dictionary<string,byte[]> imgList = ReadImagesFromdisk(dir);
var fileList = imgList.Keys.ToList();
var FailedUploads = new List<string>();
var syncFailed = new object();
fileList.ParallelForEarch(maxConnections,(fileName) => {
var tmpFailed = DoUploadImage(ftpPath,fileName,existsMode,verifyOptions);
lock (syncFailed) {
FailedUploads.AddRange(tmpFailed);
}
});
return FailedUploads;
}
private List<string> DoUploadImage(string ftpPath,string file,FtpVerify verifyOptions) {
var FailedUploads = new List<string>();
using (var ftp = new FtpClient()) {
ftp.Host = _ftpServer;
ftp.Port = _ftpPort;
if (!string.IsNullOrEmpty(_ftpUser) && !string.IsNullOrEmpty(_ftpPassword))
ftp.Credentials = new NetworkCredential(_ftpUser,_ftpPassword);
ftp.EncryptionMode = FtpEncryptionMode.Auto;
ftp.ValidateAnyCertificate = true;
ftp.OnLogEvent = OnFTPLogEvent;
ftp.AutoConnect();
var remotePath = $"{ftpPath}{Path.GetFileName(file)}";
try {
ftpStatus = ftp.UploadFile(file,remotePath,createRemoteDir,verifyOptions);
} catch (Exception ex) {
//catch exception
}
if (ftpStatus.IsFailure())
FailedUploads.Add(file);
}
return FailedUploads;
}
public void ParallelForEarch<TSource>(this IEnumerable<TSource> source,int parallelSlots,Action<TSource> action) {
Parallel.ForEach(source,new ParallelOptions() { MaxDegreeOfParallelism = parallelSlots },action);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)