c# - 是否可以在 Parallel.For 中定义执行顺序?

标签 c# multithreading .net-4.0 synchronization parallel-for

// parameters.Count == 10
// actualFreeLicenses == 2
Parallel.For(0, parameters.Count, new ParallelOptions() 
                    {
                        MaxDegreeOfParallelism = actualFreeLicenses
                    }, i =>
                    {
                        ExternalProgram(i);
                    }
);

当我执行上面的代码时,我注意到传递给 ExternalProgram 方法的 i 的值是 1 & 6,后来是 2 & 7,后来是 3 & 8。 ..

如果我有 14 个参数和 2 个许可证,它总是启动 1 和 8,然后是 2 和 9 ...

是否可以定义顺序:首先是 1 和 2,然后是 3 和 4 等等?

最佳答案

在并行循环体中使用 Queue/ConcurrentQueue 和出队项目怎么样?这将确保保留顺序。

关于c# - 是否可以在 Parallel.For 中定义执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7595503/

相关文章:

.net-2.0 - 引用 .net 2 程序集时,.Net 4 应用程序中会发生什么?

.net-4.0 - .NET Framework 4.0 System.IO 引用缺少路径类

c# - 使用反射更新列表中的值

javascript - 如何解析文本中的引号以在 Javascript 确认消息框中工作

multithreading - Parallel::ForkManager fork 后只有一个事件线程。为什么?

c# - 如何在 c# MVC 中从 Google+ 登录迁移到 Google 登录

c# - 使用 MathNet.Numerics 的矩阵求逆

c# - 如何使用foreach添加父节点

c++ - 取消运行长时间操作的线程

c - Linux 内核线程与自旋锁卡住