将Parallel.ForEach限制为仅64个操作

时间:2013-06-09 10:29:28

标签: c# multithreading task-parallel-library

我有以下代码将数据插入excel文件:

 Parallel.ForEach(fileNames.ToArray(), filename =>
 {
    OleDbConnection cn = new OleDbConnection(connect to filename.xlsx)
    cn.open()
    ... oledb stuff...
    cn.close()
 });

这个问题是OleDbConnection似乎只允许64个开放连接,并且在这个Parallel.ForEach中有300个循环。因此,OledbConnection会抛出一个错误,因为有超过64个连接打开

是否有解决办法,以便TPL只能执行64次代码并将其余部分排队?有点像64批次

1 个答案:

答案 0 :(得分:3)

您需要添加

        ParallelOptions parallelOptions = new ParallelOptions();
        parallelOptions.MaxDegreeOfParallelism = 64;

并使用' parallelOptions'致电' Parallel.ForEach'

所以你的代码看起来像

Parallel.ForEach(fileNames.ToArray(), parallelOptions , filename =>
.
.