考虑一下这巨大的任务池:
var tasks = new Task[4]
{
Task.Factory.StartNew(() => DoSomething()),
Task.Factory.StartNew(() => DoSomething()),
Task.Factory.StartNew(() => DoSomething()),
Task.Factory.StartNew(() => DoSomething()),
Task.Factory.StartNew(() => DoSomething())
};
Task.WaitAll(tasks);
如果我只想同时说三个任务怎么办?我将如何在代码中实现呢?
最佳答案
一个比MSDN版本更简单的示例是使用Parallel.Invoke设置最大并行度:
Parallel.Invoke(
new ParallelOptions() { MaxDegreeOfParallelism = 3 },
() => DoSomething(),
() => DoSomething(),
() => DoSomething(),
() => DoSomething(),
() => DoSomething());
但是,Parallel.Invoke()将阻塞,直到所有并行操作都完成为止(这意味着,除非parallel.invoke完成,否则所有代码都不会运行)。如果这对您不起作用,那么您最终将需要创建自己的任务计划程序,如Daniel链接的MSDN文章所示。
关于c# - 限制同时执行的任务数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7774995/