我如何在每个流程执行顺序中并行运行多个流程

时间:2015-07-28 10:20:12

标签: c# asp.net multithreading parallel-processing parallel.foreach

我正在处理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 on the Top然后执行下一个foreach以处理文件

2 个答案:

答案 0 :(得分:2)

将“程序”功能拆分为下载组件和处理组件。为每个下载并行下载,然后调用您的处理函数。所有进程完成后,每个都返回并行。

答案 1 :(得分:0)

一些伪造的代码

files = getfiles
foreach file in files
process(file)
next
相关问题