【发布时间】:2016-11-22 22:20:01
【问题描述】:
我有大约 5000 个文件位于 FTP 中,所以我使用 FTP 下载这些文件,然后解压缩文件,最后处理并推送到 oracle 数据库。除了处理和推送到数据库一切正常,我不知道为什么处理没有发生。我可以看到调试器命中了该方法,但它没有进入内部方法。如何解决这个问题?
var list = ftp.GetFileList(remotepath);
//-------------------
DateTime dt = DateTime.Now;
string st = String.Format("{0:yyyyMMdd}", dt);//20161120
Task[] myTasks = new Task[list.Count];
int i = 0;
foreach (string item in list)
{
{
if (item.StartsWith("GExport_") && (!item.ToUpper().Contains("DUM")) && (item.Contains(st)) && (!item.ToUpper().Contains("BLK")))
{
4gpath = item;
//Downloadfile()
ftp.Get(dtr["REMOTE_FILE_PATH"].ToString() + 4gpath , @localDestnDir + "\\" + dtr["SOURCE_PATH"].ToString());
download_location_hw = dtr["LOCAL_FILE_PATH"].ToString();
// Spin off a background task to process the file we just downloaded
myTasks[i++] = Task.Factory.StartNew(() =>
{
//Extractfile()
ExtractZipfiles(download_location_hw + "//" + huwawei4gpath, dtr["REMOTE_FILE_PATH"].ToString(),
dtr["FTP_SERVER"].ToString(), dtr["FTP_USER_ID"].ToString(),
dtr["TECH_CODE"].ToString(), dtr["VENDOR_CODE"].ToString());
//Extract the zip file referred to by download_location_hw
// Process the extracted zip file
ProcessFile()
});
}
}
}
Task.WaitAll(myTasks);
这里ProcessFile() 方法根本没有执行
编辑
filepath 有错字导致问题,谢谢,但我的问题是是否有任何同步问题,因为首先解压缩文件并同时处理文件不可用的文件,它会在处理前等待解压缩 -
添加支票while(!File.Exists("")) { Thread.Sleep(1000);
这有什么问题吗??
【问题讨论】:
-
你怎么知道
ProcessFile没有被执行?您是否尝试在该行设置断点? -
我把断点放在那里,可以看到它打到那里但没有进去,没有数据被推入数据库。文件下载和提取成功
-
@peter 可能你正在主线程的堆栈跟踪中调试。
-
为什么foreach后面有2个大括号?
-
@CodingYoshi 我错了,但这有什么问题吗??
标签: c# .net multithreading ftp task-parallel-library