使用 C# 限制消息处理中的最大并行度
并行处理大量项目时,通常需要控制最大数量可以同时运行的任务。这有助于优化资源利用率并防止系统不堪重负。
使用提供的示例代码(循环遍历 1,000 条输入消息的集合并为每条消息启动一个任务),很难预测将要发送的消息的确切数量。并行处理。然而,在典型的四核处理器上,可能会同时处理多个消息。
限制最大并行度
限制一次处理的最大消息数,可以使用带有 MaxDegreeOfParallelism 选项的 Parallel.ForEach 方法。该选项指定可用于并行执行的最大线程数。例如,下面的代码将并行任务的数量限制为 10:
Parallel.ForEach(messages, new ParallelOptions { MaxDegreeOfParallelism = 10 }, msg => { // logic Process(msg); });
维护序列
在上面的代码中,消息不一定会被处理与它们在集合中出现的顺序相同。为了确保严格的顺序,可以使用 AsParallel 扩展方法:
var orderedMessages = messages.AsParallel(); Parallel.For(0, orderedMessages.Count(), i => { Process(orderedMessages[i]); });
在此代码中,Parallel.For 方法创建一个循环,并行迭代集合,但在每次迭代中,消息为已处理的内容是按顺序访问的。
以上是在 C# 中处理消息时如何限制并行度?的详细内容。更多信息请关注PHP中文网其他相关文章!