如何并行运行多个进程,但在每个进程内执行顺序

本文关键字:进程 顺序 执行 何并行 并行 运行 | 更新日期: 2023-09-27 18:05:10

我正在处理CSV文件在我的代码中,我只是从FTP服务器下载5个文件,然后处理这些文件。我想先下载所有5个文件,然后开始处理。

它是关于产品对每个产品有5个文件,我实际上希望并行执行产品,但顺序执行下载和处理它们。我用Parallel做过。ForEach,但它不适合我,它下载3个文件并开始处理或下载2个文件并开始处理,然后下载剩余的文件。

我只是想先下载所有文件,然后开始处理它们,但产品之间并行处理

这里是Parallel。

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来处理文件

如何并行运行多个进程,但在每个进程内执行顺序

将Programs函数拆分为下载组件和处理组件。对每一个并行地进行下载,然后调用处理函数。当所有进程完成时,每个进程返回并行。

一些伪代码

files = getfiles
foreach file in files
process(file)
next