应用场景
针对消息队列的消息量,动态的加减消费者,实现处理能力的动态伸缩
//任务列表 使用并发字典,可以放到静态类,或者使用AddSingleton,来全局使用
var dic=new ConcurrentDictionary<int, CancellationTokenSource>();
//新增并执行任务
async Task run(int id)
{
var cts = new CancellationTokenSource();
if (!dic.ContainsKey(id))
{
if(dic.TryAdd(id, cts))
{
Task.Run(() => {
while (!cts.Token.IsCancellationRequested)
{
// 执行任务
Console.WriteLine($"Task {id} is running.");
Thread.Sleep(1000); // 模拟工作
}
},cts.Token);
}
}
}
在某一时刻新增任务
比如消息队列剩余消息量超过10w
//新增任务
run(1);
//超过15w
//run(2);
//超过20w
//run(3);
//以此类推...
在某一时刻减少任务
//低于18w
dic[3].Cancel();
dic.TryRemove(3, out _);//从列表移除
//低于12w
//dic[2].Cancel();
//dic.TryRemove(2, out _);//从列表移除
//以此类推...