我如何 运行 多个进程并行但在每个进程中顺序执行
How i can run multiple processes parallel but inside each process execution sequential
我正在处理 CSV 文件
在我的代码中,我只从 ftp 服务器下载 5 个文件,然后处理这些文件。
我想先下载所有 5 个文件,然后再开始处理。
它是关于每个产品的产品有 5 个文件,我实际上想要并行执行产品但顺序执行下载和处理它们。我用 Parallel.ForEach 做到了,但它对我不起作用它下载 3 个文件并开始处理或下载 2 个文件并开始处理然后下载剩余的文件。
我只想先下载所有文件然后开始处理它们,但产品之间的并行处理
这里是Parallel.ForEach(调用方法)
Parallel.ForEach(dt.AsEnumerable(), row =>
{
//code here
Products(eSetting, row);
});
下载和处理文件的实际方法
public static void Products(ETLServiceSettings eSetting, DataRow row)
{
IEnumerable<string> Datafiles = GetFilesInFtpDirectory("ftp://");
foreach (string file in Datafiles)
{
string file_Name = "";
if (file.ToLower().Contains(".csv"))
{
productId = Convert.ToInt32(row["ProductId"].ToString());
file_Name = DownloadFile("ftp://");
}
}
string targetDirectory = Environment.CurrentDirectory + "\" + ConfigurationManager.AppSettings["InProcessETLFiles"].ToString() + "\";
List<string> vfiles = new List<string>(), sfiles = new List<string>(), ufiles = new List<string>(), psfiles = new List<string>(), sufiles = new List<string>();
foreach (var fileEntries in Directory.GetFiles(targetDirectory))
{
//Files processing code is here
FileInfo info = new FileInfo(fileEntries);
var fileName = Path.GetFileName(info.FullName);
}
}
首先上面的foreach应该完成,然后执行下一个foreach来处理文件
一些伪代码
files = getfiles
foreach file in files
process(file)
next
将程序功能拆分为下载组件和处理组件。为每个并行下载,然后调用您的处理功能。当所有进程完成时,每个 returns 并行。
我正在处理 CSV 文件 在我的代码中,我只从 ftp 服务器下载 5 个文件,然后处理这些文件。 我想先下载所有 5 个文件,然后再开始处理。
它是关于每个产品的产品有 5 个文件,我实际上想要并行执行产品但顺序执行下载和处理它们。我用 Parallel.ForEach 做到了,但它对我不起作用它下载 3 个文件并开始处理或下载 2 个文件并开始处理然后下载剩余的文件。
我只想先下载所有文件然后开始处理它们,但产品之间的并行处理
这里是Parallel.ForEach(调用方法)
Parallel.ForEach(dt.AsEnumerable(), row =>
{
//code here
Products(eSetting, row);
});
下载和处理文件的实际方法
public static void Products(ETLServiceSettings eSetting, DataRow row)
{
IEnumerable<string> Datafiles = GetFilesInFtpDirectory("ftp://");
foreach (string file in Datafiles)
{
string file_Name = "";
if (file.ToLower().Contains(".csv"))
{
productId = Convert.ToInt32(row["ProductId"].ToString());
file_Name = DownloadFile("ftp://");
}
}
string targetDirectory = Environment.CurrentDirectory + "\" + ConfigurationManager.AppSettings["InProcessETLFiles"].ToString() + "\";
List<string> vfiles = new List<string>(), sfiles = new List<string>(), ufiles = new List<string>(), psfiles = new List<string>(), sufiles = new List<string>();
foreach (var fileEntries in Directory.GetFiles(targetDirectory))
{
//Files processing code is here
FileInfo info = new FileInfo(fileEntries);
var fileName = Path.GetFileName(info.FullName);
}
}
首先上面的foreach应该完成,然后执行下一个foreach来处理文件
一些伪代码
files = getfiles
foreach file in files
process(file)
next
将程序功能拆分为下载组件和处理组件。为每个并行下载,然后调用您的处理功能。当所有进程完成时,每个 returns 并行。