csredis
csredis copied to clipboard
使用Lock还是会重复执行
在Quartz分布式集群中,希望通过使用Lock解决并发问题,但是所有机器上的任务还是会执行,请问是什么问题呢?
public async Task Execute(IJobExecutionContext context)
{
using (var Lock = RedisHelper.Lock(redisKey, 10))
{
//业务代码
}
}
有没有Lock完整的示例代码?
RedisHelper.Lock 是控制不同时执行,不是不执行。
顺便推荐一下 FreeScheduler
//每5秒触发,执行N次
var id = scheduler.AddTask("topic1", "body1", round: -1, 5);
//每次 不同的间隔秒数触发,执行6次
var id = scheduler.AddTask("topic1", "body1", new [] { 5, 5, 10, 10, 60, 60 });
//每天 20:00:00 触发,执行N次
var id = scheduler.AddTaskRunOnDay("topic1", "body1", round: -1, "20:00:00");
//每周一 20:00:00 触发,执行1次
var id = scheduler.AddTaskRunOnWeek("topic1", "body1", round: 1, "1:20:00:00");
//每月1日 20:00:00 触发,执行12次
var id = scheduler.AddTaskRunOnMonth("topic1", "body1", round: 12, "1:20:00:00");
//自定义间隔
var id = scheduler.AddTaskCustom("topic1", "body1", "0/1 * * * * ? ");
https://github.com/2881099/FreeScheduler FreeScheduler 轻量化定时任务调度,支持临时的延时任务和重复循环任务(可持久化),可按秒,每天/每周/每月固定时间,自定义间隔执行,支持 .NET Core 2.1+、.NET Framework 4.0+ 运行环境。
集成后台系统 - 管理任务
// 使用 SQL 查询 TaskInfo、TaskLog 两个表进行分页显示
//暂停任务
scheduler.PauseTask(id);
//恢复暂停的任务
scheduler.ResumeTask(id);
//删除任务
scheduler.RemoveTask(id);
额..... 跟我想象的有点不一样,我理解的是使用 RedisHelper.Lock 后,其中一台机子执行,另外的因为有分布式锁,则不执行。请问RedisHelper有没有提供类似的方法呢?
lock(xx) { if (...) { } }
有没有用过这种代码