C#run方法多次并发

时间:2015-10-15 16:33:07

标签: c# multithreading concurrency

我有以下C#代码:

string[] files = Directory.GetFiles(@"C:\Users\Documents\DailyData", "*.txt", SearchOption.AllDirectories);

        for (int ii = 0; ii < files.Length; ii++)
        {
            perFile(files[ii]);
        }

每个文件打开每个文件并创建一系列通用列表,然后将结果写入文件。

每次迭代大约需要15分钟。

我希望perFile方法同时执行,例如在开始下一个迭代之前不等待当前迭代完成。

我的问题是:

我该怎么做?

如何控制perFile并发运行的实例数

如何确定我的计算机一次可以处理的perFile个并发实例数

2 个答案:

答案 0 :(得分:3)

尝试使用Parallel.ForEach。您可以使用ParallelOptions.MaxDegreeOfParallelism属性设置运行perFile的最大数量。

答案 1 :(得分:2)

如果您正在使用.Net 4.5及更高版本,则可以使用Parallel.For执行所需操作。您可以通过ParallelOptions提供MaxDegreeOfParalleism来控制要使用的线程数设置为你喜欢的数字。

示例代码:

ParallelOptions POptions = new ParallelOptions();
POptions.MaxDegreeOfParalleism = ReplaceThisWithSomeNumber;

Parallel.For(0,files.Length,POptions,(x) => {perFile(files[x]);});

请注意,您的程序将受IO限制(阅读Asynchronous IO以获取有关如何解决该问题的更多信息)