限制循环中正在运行的任务数 [重复]

Limiting number of running tasks in a loop [duplicate]

提问人:Magik 提问时间:10/19/2023 最后编辑:Theodor ZouliasMagik 更新时间:10/21/2023 访问量:66

问:

我有一种情况,我想限制并发运行任务的数量。如果您查看下面的代码..

public class TaskScheduler
{
    public void Initialize()
    {
        var taskProcessor = new TaskProcessor();

        // Run infinite loop
        while (true)
        {
            taskProcessor.Process();

            Thread.Sleep(1000);
        }
    }
}

public class TaskProcessor
{
    private const int MaxConcurrentTasks = 4;

    public void Process()
    {
        for(var i = 0; i < MaxConcurrentTasks; i++)
        {
            Task.Factory.StartNew(DoWorkAsync);
        }
    }
}

当前情况:当前,无论以前的任务是否已完成,每秒都会创建新任务。 TaskScheduler.Initialize() 函数每秒调用一次 taskProcessor.Process(),强制 TaskProcessor 启动新任务。

期望输出:需要的是,无论每秒调用一次,都应该只在某一点启动(即本例中的 4 个)任务。例如,如果正在处理 4 个任务,则不创建任何新任务。如果 3 个正在运行,但 1 个已完成,则仅启动 1 个新任务,依此类推......TaskScheduler.Initialize()taskProcessor.Process()TaskProcessor.Process()MaxConcurrentTasks

如果有人能为我提供有关如何有效实现这一目标的方向,我将不胜感激。

提前致谢。

C# .NET 多线程异 任务并行库

评论

0赞 Trisped 10/20/2023
您每次都创建新线程而不是让线程获得下一个要处理的项目是有原因的吗?

答: 暂无答案