提问人:Magik 提问时间:10/19/2023 最后编辑:Theodor ZouliasMagik 更新时间:10/21/2023 访问量:66
限制循环中正在运行的任务数 [重复]
Limiting number of running tasks in a loop [duplicate]
问:
我有一种情况,我想限制并发运行任务的数量。如果您查看下面的代码..
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
如果有人能为我提供有关如何有效实现这一目标的方向,我将不胜感激。
提前致谢。
答: 暂无答案
评论