0
点赞
收藏
分享

微信扫一扫

基于Redis的分布式锁

Brose 2024-08-09 阅读 34
.netc#前端

.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);
        }
    }

}


在某一时刻新增任务

//新增任务
run(1);

//超过15w
//run(2);

//超过20w
//run(3);

//以此类推...

在某一时刻减少任务

//低于18w
dic[3].Cancel();
dic.TryRemove(3, out _);//从列表移除

//低于12w
//dic[2].Cancel();
//dic.TryRemove(2, out _);//从列表移除


//以此类推...
举报

相关推荐

0 条评论