限制同时执行的任务的数量

Kje*_*sen 8 c# task-parallel-library c#-4.0

考虑这个庞大的任务池:

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);
Run Code Online (Sandbox Code Playgroud)

如果我只想同时说3个任务怎么办?我将如何在代码中实现它?

Gar*_*y.S 11

比MSDN版本更复杂的例子是使用Parallel.Invoke设置最大并行度:

Parallel.Invoke(
    new ParallelOptions() { MaxDegreeOfParallelism = 3 }, 
    () => DoSomething(), 
    () => DoSomething(),
    () => DoSomething(),
    () => DoSomething(),
    () => DoSomething());
Run Code Online (Sandbox Code Playgroud)

然而,Parallel.Invoke()将阻塞,直到所有并行操作完成(这意味着除了parallel.invoke之外的任何代码都不会运行,直到它们全部完成).如果这对您不起作用,那么最终需要创建自己的任务调度程序,如Daniel所链接的MSDN文章所示.


Dan*_*att 8

我在MSDN上找到了这个例子.我相信它实现了你想要实现的目标.