考虑一下这巨大的任务池:

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/

10-08 22:26
查看更多