.Net动态新增,结束 Task.Run任务的一种实现思路

.Net动态新增,结束 Task.Run任务的一种实现思路

应用场景

针对消息队列的消息量,动态的加减消费者,实现处理能力的动态伸缩

//任务列表 使用并发字典,可以放到静态类,或者使用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 _);//从列表移除


//以此类推...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42199478

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值