Quartz.net任务设置中如何确保同一任务最多只允许一个实例并发执行?

2026-04-19 23:131阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计523个文字,预计阅读时间需要3分钟。

Quartz.net任务设置中如何确保同一任务最多只允许一个实例并发执行?

Quartz定时任务默认是并发执行的,不会等待上一个任务完成。只需间隔时间到便执行,若任务执行时间过长,会长时间占用资源,导致其他任务阻塞。例如,Job设置1分钟跑一次,就会立即执行。

Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。

比如Job设置1分钟跑一次,每次获取50条短信发送,发送完成后状态设置为已发送。但是可能Job1执行的时间超过1分钟50条短信还没有跑完,这时候Job2 启动了,就会获取全部未发送的记录继续发送。造成重复执行短信发送的问题。

@DisallowConcurrentExecution

此标记用在实现Job的类上面,意思是不允许并发执行,按照我之前的理解是 不允许调度框架在同一时刻调用Job类,后来经过测试发现并不是这样,而是Job(任务)的执行时间[比如需要10秒]大于任务的时间间隔[Interval(5秒)],那么默认情况下,调度框架为了能让 任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务。

阅读全文

本文共计523个文字,预计阅读时间需要3分钟。

Quartz.net任务设置中如何确保同一任务最多只允许一个实例并发执行?

Quartz定时任务默认是并发执行的,不会等待上一个任务完成。只需间隔时间到便执行,若任务执行时间过长,会长时间占用资源,导致其他任务阻塞。例如,Job设置1分钟跑一次,就会立即执行。

Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。

比如Job设置1分钟跑一次,每次获取50条短信发送,发送完成后状态设置为已发送。但是可能Job1执行的时间超过1分钟50条短信还没有跑完,这时候Job2 启动了,就会获取全部未发送的记录继续发送。造成重复执行短信发送的问题。

@DisallowConcurrentExecution

此标记用在实现Job的类上面,意思是不允许并发执行,按照我之前的理解是 不允许调度框架在同一时刻调用Job类,后来经过测试发现并不是这样,而是Job(任务)的执行时间[比如需要10秒]大于任务的时间间隔[Interval(5秒)],那么默认情况下,调度框架为了能让 任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务。

阅读全文