c# - 如何限制c#中的最大并行任务数

标签 c# .net asynchronous

我要处理 1000 条输入消息。我正在循环输入集合并为要处理的每条消息启动新任务。

//Assume this messages collection contains 1000 items
var messages = new List<string>();

foreach (var msg in messages)
{
   Task.Factory.StartNew(() =>
   {
    Process(msg);
   });
 }

我们可以猜测当时最多同时处理多少条消息(假设是普通的四核处理器),或者我们可以限制当时要处理的最大消息数吗?

如何确保此消息以与集合相同的顺序/顺序得到处理?

最佳答案

你可以使用 Parallel.Foreach并依靠MaxDegreeOfParallelism相反。

Parallel.ForEach(messages, new ParallelOptions {MaxDegreeOfParallelism = 10},
msg =>
{
     // logic
     Process(msg);
});

关于c# - 如何限制c#中的最大并行任务数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36564596/

相关文章:

c# - 如何使用 ItextSharp 检索数字签名信息(名称、日期...)

c# - 为什么 SqlDependency.OnChange 没有被触发?

c# - 为什么 WebApi Controller 运行后没有人处理 DbContext?

.net - 指示不是 WCF 数据契约(Contract)一部分的标准方法?

javascript - 如何打破 promise 中的循环?

javascript - 如何在node.js中同步运行这个函数

JavaScript Promise.all - 如何检查解析状态?

c# - 字符串英语化?

c# - 如何解决重定向循环

c# - 将许多 excel 图表作为链接粘贴到 Word